创建自定义文化以支持性别语言差异

在多语言软件开发中,除了考虑语言差异外,有时还需要考虑性别差异,尤其是在非英语语言中更为常见,例如希伯来语。通过自定义资源管理器或提供者类,可以为每种需要的语言创建“女性”文化,这是一种简化的方法。以下是创建自定义文化的步骤:

步骤1:创建自定义文化

对于每种需要的语言,创建一个自定义的“女性”文化,作为原始文化的克隆。例如,以下代码创建了一个名为'he-IL-f'的自定义文化,它是'he-IL'的克隆。在您的机器上安装该文化。可以通过查看“C:\Windows\Globalization”文件夹来验证安装是否成功。

CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("he-IL-f", CultureAndRegionModifiers.None); CultureInfo ci = new CultureInfo("he-IL"); cib.LoadDataFromCultureInfo(ci); RegionInfo ri = new RegionInfo("IL"); cib.LoadDataFromRegionInfo(ri); cib.Parent = ci; CultureAndRegionInfoBuilder.Unregister("he-IL-f"); cib.Register();

上述代码需要管理员权限才能执行,因此在Vista系统中,需要以管理员身份运行exe。新文化的回退文化将是原始文化,这就是为什么有这行代码:

cib.Parent = ci;

这使只需要在“女性”RESX文件中输入需要更改的字符串。

步骤2:创建相应的RESX文件

在“女性”RESX文件中,只需要插入与“男性”版本不同的字符串。

步骤3:设置线程的UICulture属性

protected override void InitializeCulture() { string culture = ""; if (Request.Form["DropDownListCulture"] != null) { string gender = Request.Form["DropDownListGender"]; bool isFemale = (gender == "Female"); culture = Request.Form["DropDownListCulture"]; dir = (culture == "he-IL") ? "rtl" : "ltr"; if (isFemale) { culture += "-f"; } } Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture); Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); base.InitializeCulture(); }

在示例中,使用了页面的InitializeCulture事件来执行逻辑。在更复杂的系统中,可能希望将这个逻辑移动到更集中的位置(可能是应用程序级别的某个事件)。从表单中接收了两个参数——语言和性别。当然,在实际应用中,会在用户登录时自动使用这些信息。

在提供的源代码中,注册了三种自定义文化:en-US-f、he-IL-f和fr-FR-f。您可以通过在运行exe后检查“C:\Windows\Globalization”文件夹来验证这一点。

请注意,法语文化是在没有这行代码的情况下注册的:

cib.Parent = ci;

这意味着它不是回退到fr-FR,而是回退到默认文化(在例子中是en-US)。这在使用全局资源‘Talya’(页面底部)时得到了演示:它的默认英文是‘talya’,在he-IL和fr-FR文化中被覆盖,但在它们的女性版本中没有被覆盖。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485