.NET网站国际化策略

我所在的公司是做SAAS软件,用户群体是面向全球的,因此对应业务系统国际化就是顺理成章的事情。

其实国际化重点在于多语言支持,本文就从这方面入手。

多语言

如上解决方案截图,BQoolCommon.Resource是多语言资源工程,下面来看看具体怎么实现:

2.1、定义多语言资源文件

以支持中(繁体、简体)英文为例,定义如下图资源文件

资源文件中定义的资源配置项如下:

 

生成对应的键值对属性

  /// <summary>        ///   查詢類似 01:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_1 {            get {                return ResourceManager.GetString("SettingDailyAt_1", resourceCulture);            }        }                /// <summary>        ///   查詢類似 10:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_10 {            get {                return ResourceManager.GetString("SettingDailyAt_10", resourceCulture);            }        }                /// <summary>        ///   查詢類似 11:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_11 {            get {                return ResourceManager.GetString("SettingDailyAt_11", resourceCulture);            }        }                /// <summary>        ///   查詢類似 12:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_12 {            get {                return ResourceManager.GetString("SettingDailyAt_12", resourceCulture);            }        }                /// <summary>        ///   查詢類似 13:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_13 {            get {                return ResourceManager.GetString("SettingDailyAt_13", resourceCulture);            }        }                /// <summary>        ///   查詢類似 14:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_14 {            get {                return ResourceManager.GetString("SettingDailyAt_14", resourceCulture);            }        }                /// <summary>        ///   查詢類似 15:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_15 {            get {                return ResourceManager.GetString("SettingDailyAt_15", resourceCulture);            }        }                /// <summary>        ///   查詢類似 16:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_16 {            get {                return ResourceManager.GetString("SettingDailyAt_16", resourceCulture);            }        }                /// <summary>        ///   查詢類似 17:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_17 {            get {                return ResourceManager.GetString("SettingDailyAt_17", resourceCulture);            }        }                /// <summary>        ///   查詢類似 18:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_18 {            get {                return ResourceManager.GetString("SettingDailyAt_18", resourceCulture);            }        }                /// <summary>        ///   查詢類似 19:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_19 {            get {                return ResourceManager.GetString("SettingDailyAt_19", resourceCulture);            }        }                /// <summary>        ///   查詢類似 02:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_2 {            get {                return ResourceManager.GetString("SettingDailyAt_2", resourceCulture);            }        }                /// <summary>        ///   查詢類似 20:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_20 {            get {                return ResourceManager.GetString("SettingDailyAt_20", resourceCulture);            }        }                /// <summary>        ///   查詢類似 21:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_21 {            get {                return ResourceManager.GetString("SettingDailyAt_21", resourceCulture);            }        }                /// <summary>        ///   查詢類似 22:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_22 {            get {                return ResourceManager.GetString("SettingDailyAt_22", resourceCulture);            }        }                /// <summary>        ///   查詢類似 23:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_23 {            get {                return ResourceManager.GetString("SettingDailyAt_23", resourceCulture);            }        }                /// <summary>        ///   查詢類似 24:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_24 {            get {                return ResourceManager.GetString("SettingDailyAt_24", resourceCulture);            }        }                /// <summary>        ///   查詢類似 03:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_3 {            get {                return ResourceManager.GetString("SettingDailyAt_3", resourceCulture);            }        }                /// <summary>        ///   查詢類似 04:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_4 {            get {                return ResourceManager.GetString("SettingDailyAt_4", resourceCulture);            }        }                /// <summary>        ///   查詢類似 05:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_5 {            get {                return ResourceManager.GetString("SettingDailyAt_5", resourceCulture);            }        }                /// <summary>        ///   查詢類似 06:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_6 {            get {                return ResourceManager.GetString("SettingDailyAt_6", resourceCulture);            }        }                /// <summary>        ///   查詢類似 07:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_7 {            get {                return ResourceManager.GetString("SettingDailyAt_7", resourceCulture);            }        }                /// <summary>        ///   查詢類似 08:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_8 {            get {                return ResourceManager.GetString("SettingDailyAt_8", resourceCulture);            }        }                /// <summary>        ///   查詢類似 09:00 的當地語系化字串。        /// </summary>        public static string SettingDailyAt_9 {            get {                return ResourceManager.GetString("SettingDailyAt_9", resourceCulture);            }        }

2.2、使用

项目当中引用对应的资源类库

使用翻译文本

  •  
<div class="line01"></div><div class="button_area align_r">    @CommonUIHelper.BuildCloseColorboxButton(PreferenceElement.Cancel)    <button class="button02 jqAddFilter">@FavoriteFilterElement.Save</button></div>

 

设置可供用户设置的语言选项

 

用户选择对应语系的时候,进行语系切换,如下英文切换

  #region set Culture en-US
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            #endregion set Culture en-US

 

效果如下

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此文档是从实际项目中总结出来的,互联网上只有“在单一页面进行语言切换”的教程, 没有“一键切换”的解决方案,更没有同时把5种读取资源文件总结在一起的demo。 本文档重点 1.多种读取方式 2.一键全站切换 步骤 一:新建一个asp.net 空 web应用程序“Internationalization”(图1) 二:右键“Internationalization”--->添加--->添加ASP.NET文件夹--->App_GlobalResources 三:右键“App_GlobalResources”--->添加--->新建项--->资源文件--->GlobalLanguage.resx 四:在GlobalLanguage.resx里添加键值对.(图二) 五:连续复制“GlobalLanguage.resx”两次到“App_GlobalResources”下面,并修改名称为 GlobalLanguage.en-US.resx GlobalLanguage.zh-CN.resx 说明:(为什么会有三个文件呢?系统必须有一个默认文件“GlobalLanguage.resx”,两种语言两个文件.) 六:修改英文和中文资源文件里的键值对。 说明(网上大多做法都是把语言设置为浏览器自动识别语言, 这种方式在实际项目中一般不用,所以直接讲解用程序来控制) 七:添加language1.aspx (图3,4) 八:添加language2.aspx (图5),在设计模式下“工具”--->“生成本地资源”,会自动添加一个“App_LocalResources” 和第五步一样,添加再添加两个资源文件。 language2.aspx.zh-CN.resx language2.aspx.en-US.resx 说明(一键全站切换的实现方法有多种,这里只讲最有效的,编写一个基类,在里面设置一个全局变量lan,所有 页面都继承这个基类,再通过程序修改变量lan,用Session最简单,但是用户过多时对内存的消耗很大, 还可以用数据库和配置文件,但是最好用Cookie,所以下面以Cookie为例子) 九:新建一个母板页“language.Master”(图6,7) 十:添加language3.aspx (图8,9),必须继承Base类 十一:添加language4.aspx (图10),必须继承Base类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值