.net - 使用自定义文化时,ResourceManager 未选择正确的资源集

标签 .net asp.net-mvc-2 localization globalization resourcemanager

我使用在 this blog by Alex Adamyan 上找到的代码创建了一个本地化的 MVC 网站。 .

如果我使用现有的文化,这非常有效。但是,我正在尝试本地化他加禄语(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:
  • 主页.aspx.resx;
  • Home.aspx.tl.resx
  • Home.aspx.tl-PH.resx
  • Home.aspx.de.resx

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

    所以当我去我的网站首页http://localhost:1907我得到默认的(英语)语言字符串。

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

    当我转到他加禄语版本时 http://localhost:1907/tlhttp://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();
    

    第二种特定文化似乎没问题。

    关于.net - 使用自定义文化时,ResourceManager 未选择正确的资源集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3743801/

    相关文章:

    c# - 如何在 C# 中制作这种类型的选择文件夹对话框?

    asp.net-mvc-2 - ASP.NET MVC2 - 在模型绑定(bind)器中解析参数属性

    asp.net-mvc - ASP.NET MVC2(ala RSpec)中的测试 View

    c# - 了解如何本地化资源

    iphone - 使用按钮更改 iphone 应用程序语言,无需重新启动应用程序

    c# - Model Class DisplayFormat() 如何本地化 NullDisplayText?

    c# - 为什么不显示指向正确控件的气球提示?

    c# - 第一次学习Oracle

    validation - 使用数据注释对依赖属性进行自定义模型验证

    c# - 无法将每个有空格的单词分开并将其存储在数组中以获取某些文本