Fra*_*tti 15 .net c# asp.net resx internationalization
我有一个ASP.NET3.5(C#)ASPX页面,它以10种不同的语言进行国际化.
该页面结构非常复杂,有几十个由状态机模式驱动的嵌套视图.
编辑:我meta:resourcekey在每个asp控件中使用语法,允许使用隐式资源表达式的声明性语法.
我被要求根据一些查询字符串参数"标记"页面.品牌化不仅意味着加载不同的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
Run Code Online (Sandbox Code Playgroud)
myPage.aspx将查找名为myPage.xx-XX.resx的 resx文件.
有没有办法加载brand1xxx.resx文件或brand2xxx.resx基于某些值?
提前致谢.
Jak*_*icz 12
您可以使用自定义文化来实现此效果.
首先,在系统中创建和注册自定义文化,例如:
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();
Run Code Online (Sandbox Code Playgroud)
请注意,您可能希望构建一个简单的工具来自动执行此操作,因为这些文化需要安装在将编译或执行应用程序的每个系统上.需要行政权才能记录文化.
安装文化后,像平常一样创建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;
Run Code Online (Sandbox Code Playgroud)
(设置CurrentCulture不是必需的,因为资源在CurrentUICulture方面有效,但设置两者都允许您进一步自定义每个品牌的页面,例如为每个自定义文化/品牌使用不同的日期/时间格式设置)
一些说明:
| 归档时间: |
|
| 查看次数: |
5333 次 |
| 最近记录: |