使用自定义区域性时 ResourceManager 未选择正确的资源集

2024-03-21

我使用以下代码创建了一个本地化的 MVC 网站:亚历克斯·阿达米安 (Alex Adamyan) 的博客 http://adamyan.blogspot.com/2010/07/addition-to-aspnet-mvc-localization.html.

如果我使用现有的文化,这会非常有效。但是,我正在尝试本地化他加禄语(tl 或 tl-PH)。 Windows 没有内置这种文化,所以我按照下面的代码创建了一种文化(我已经尝试了 tl 和 tl-PH):

public static void CreateCustomCultures()

{

    var cultureBuilder = new CultureAndRegionInfoBuilder(
                            "tl", CultureAndRegionModifiers.Neutral);

    cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US"));
    cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US"));
    cultureBuilder.IsMetric = true;
    cultureBuilder.CultureEnglishName = "Tagalog";
    cultureBuilder.CultureNativeName = "Tagalog";
    cultureBuilder.RegionEnglishName = "Tagalog";
    cultureBuilder.RegionNativeName = "Tagalog";
    cultureBuilder.TwoLetterISOLanguageName = "tl";
    cultureBuilder.ThreeLetterISORegionName = "PH";
    cultureBuilder.Register();

    var cultureBuilder2 = new CultureAndRegionInfoBuilder(
                            "tl-PH", CultureAndRegionModifiers.None);

    cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo("en-US"));
    cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo("US"));
    cultureBuilder2.IsMetric = true;
    cultureBuilder2.CultureEnglishName = "Tagalog";
    cultureBuilder2.CultureNativeName = "Tagalog";
    cultureBuilder2.RegionEnglishName = "Tagalog";
    cultureBuilder2.RegionNativeName = "Tagalog";
    cultureBuilder2.TwoLetterISOLanguageName = "tl";
    cultureBuilder2.ThreeLetterISORegionName = "PH";
    cultureBuilder2.Register();

}

我的测试站点上还有四个资源文件,位于 ~/Views/Home/Resources:

  • Home.aspx.resx;
  • 主页.aspx.tl.resx
  • Home.aspx.tl-PH.resx
  • 主页.aspx.de.resx

当我构建时,我会在 bin 目录下得到三个适当命名的目录,每个目录都有一个适当命名的 dll。

所以当我进入我的网站主页时http://本地主机:1907 http://localhost:1907我得到默认(英语)语言字符串。

当我进入德语 (de) 主页时http://localhost:1907/de http://localhost:1907/de我得到了该网站的德语版本。

当我去他加禄语版本时http://localhost:1907/tl http://localhost:1907/tl or http://localhost:1907/tl-PH http://localhost:1907/tl-PH,我得到的是英文版本而不是他加禄语版本。

我已在资源获取代码中放置断点,并确认当前线程的区域性和 UI 区域性已正确设置为他加禄语区域性,并且塔加拉族语是传递给 resourceManager.GetString(key,culture) 的区域性。

有什么想法吗?我没有正确地创造我的文化吗?


我认为你们的文化从未被注册过,至少其中一种没有被注册。

下面的代码将引发异常,因为您无法为中性区域性指定区域值。就像您无法为中立区域性创建 DateTimeFormatInfo 对象一样。

var cultureBuilder = new CultureAndRegionInfoBuilder(
                        "tl", CultureAndRegionModifiers.Neutral);

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US"));
cultureBuilder.IsMetric = true;
cultureBuilder.CultureEnglishName = "Tagalog";
cultureBuilder.CultureNativeName = "Tagalog";
cultureBuilder.RegionEnglishName = "Tagalog";
cultureBuilder.RegionNativeName = "Tagalog";
cultureBuilder.TwoLetterISOLanguageName = "tl";
cultureBuilder.ThreeLetterISORegionName = "PH";
cultureBuilder.Register();

应该是这样的

var cultureBuilder = new CultureAndRegionInfoBuilder(
                        "tl", CultureAndRegionModifiers.Neutral);

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cultureBuilder.CultureEnglishName = "Tagalog";
cultureBuilder.CultureNativeName = "Tagalog";
cultureBuilder.TwoLetterISOLanguageName = "tl";
cultureBuilder.Register();

第二种特定文化似乎还不错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义区域性时 ResourceManager 未选择正确的资源集 的相关文章

随机推荐