Csharp/C#教程:如何根据某些参数加载不同的RESX文件分享


如何根据某些参数加载不同的RESX文件

我有一个ASP.NET3.5(C#)ASPX页面,它以10种不同的语言进行国际化。

该页面结构非常复杂,有许多由状态机模式驱动的嵌套视图。

编辑:我在每个asp控件中使用meta:resourcekey语法,它允许使用隐式资源表达式的声明性语法。

我被要求根据一些查询字符串参数“标记”页面。 品牌化不仅意味着加载不同的CSS文件,还意味着具有不同的文本模糊(在所有语言中)。

是否有一种简单的方法来“交换”resx文件,而无需为此页面上的每个数百个文字和图像手动获取资源?

换句话说,假设我有以下RESX文件:

 brand1_myPage.aspx.en-US.resx brand1_myPage.aspx.de-DE.resx brand1_myPage.aspx.fr-FR.resx brand2_myPage.aspx.en-US.resx brand2_myPage.aspx.de-DE.resx brand2_myPage.aspx.fr-FR.resx 

myPage.aspx将查找名为myPage.xx-XX.resx的 resx文件。

有没有办法加载brand1xxx.resx文件或brand2xxx.resx基于某些值?

提前致谢。

您可以使用自定义文化来实现此效果。

首先,在系统中创建和注册自定义文化,例如:

 CultureAndRegionInfoBuilder builder = new CultureAndRegionInfoBuilder("en-US-brand1", CultureAndRegionModifiers.None); CultureInfo parentCI = new CultureInfo("en-US"); RegionInfo parentRI = new RegionInfo("en-US"); builder.LoadDataFromCultureInfo(parentCI); builder.LoadDataFromRegionInfo(parentRI); builder.Parent = parentCI; // set other properties of the custom culture (CultureEnglishName, CultureNativeName, possibly other ones) // ... builder.Register(); 

请注意,您可能希望构建一个简单的工具来自动执行此操作,因为这些文化需要安装在将编译或执行应用程序的每个系统上。 需要行政权才能记录文化。

安装文化后,像平常一样创建resx文件,但使用自定义文化名称(myPage.aspx.en-US-brand1.resx等)。

现在剩下要做的就是根据一些参数设置System.Threading.Thread.CurrentThread.CurrentUICulture(越快越好,BeginRequest是个好地方;如果只想要某些页面,则为Page_PreInit):

 CultureInfo ci = new CultureInfo(Request.QueryString["paramname"]); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; 

(设置CurrentCulture不是必需的,因为资源在CurrentUICulture方面有效,但设置两者都允许您进一步自定义每个品牌的页面,例如为每个自定义文化/品牌使用不同的日期/时间格式设置)

一些说明:

如果您在代码中引用资源,如下所示: Resources.brand1_myPage.WelcomeMessage则可能很难。

但您也可以通过编程方式检索资源: GetGlobalResourceObject ("brand1_myPage", "WelcomeMessage") 。 在这里,您可以使用资源文件名进行操作。

上述就是C#学习教程:如何根据某些参数加载不同的RESX文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/960669.html

(0)
上一篇 2021年11月25日
下一篇 2021年11月25日

精彩推荐