为特定客户端创建自定义区域性和关联资源文件的建议方法是什么?

时间:2010-10-08 20:39:14

标签: asp.net localization resources resx cultureinfo

我的客户端希望为我的字符串资源的子集指定他们自己的本地化内容版本。

为简单起见,这里是基本的例子:
假设我有2个本地化字符串(显示英文内容)
PageTitle =“Hello World”
PageDescription =“这是一个更加冗长的Hello World版本!”

我希望本地化这些,所以我有资源文件。

  • Strings.resx (包含我的英文 字符串)
  • Strings.fr-ca.resx (包含我的法语 - 加拿大字符串)
  • Strings.fr-ca-clientX.resx (包含 我的客户的字符串是 法国 - 加拿大人和非常 挑剔;) - 只是在开玩笑)

理想情况下,“Strings.fr-ca-clientX”只能指定他们想要“覆盖”的字符串。换句话说,他们可能只想更改PageTitle并继续使用“fr-ca”资源文件中的PageDescription。

那我该如何在.NET中解决这个问题呢?理想情况下,我只是创建resx文件并在我的“Web.config”中指定文化,它应该工作...

<globalization uiCulture="fr-ca-clientX" culture="fr-ca-clientX" />

然而,这不起作用。 “标签包含'culture'属性的无效值”是我的第一个obsticle。

谢谢,
贾斯汀

3 个答案:

答案 0 :(得分:2)

public void AddCustomCulture(string cultureName, string baseCulture)
    {
        var cultureBuilder = new CultureAndRegionInfoBuilder(cultureName, CultureAndRegionModifiers.None);

        cultureBuilder.LoadDataFromCultureInfo(new CultureInfo(baseCulture));

        var region = baseCulture.Substring(3, 2);

        cultureBuilder.LoadDataFromRegionInfo(new RegionInfo(region));

        cultureBuilder.Register();
    }

答案 1 :(得分:2)

您可以使用以下代码创建新文化:

        //Get culture info based on Great Britain
        CultureInfo cultureInfo = new CultureInfo( "en-GB" );
        RegionInfo regionInfo = new RegionInfo( cultureInfo.Name );

        CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder( txtCultureName.Text, CultureAndRegionModifiers.None );

        cultureAndRegionInfoBuilder.LoadDataFromCultureInfo( cultureInfo );
        cultureAndRegionInfoBuilder.LoadDataFromRegionInfo( regionInfo );

        // Custom Changes
        cultureAndRegionInfoBuilder.CultureEnglishName = txtCultureName.Text;
        cultureAndRegionInfoBuilder.CultureNativeName = txtNativeName.Text;

        cultureAndRegionInfoBuilder.Register();

我写了一篇关于创建应用程序的帖子......

http://wraithnath.blogspot.com/search/label/Globalization

答案 2 :(得分:1)

您可能需要创建自己的文化并进行注册。您将在该主题here找到MSDN文章。

您不需要更改culture属性,它应该保留在“fr-CA”,因为uiCulture属性负责从资源加载字符串。