0

我有一个 ASP.NET 3.5 网站。

为什么我不能像这样为 Bokmal 语言创建特定的文化:

CultureInfo c = CultureInfo.CreateSpecificCulture("nb");

语言“en”工作正常,结果为“en-US”。我认为使用“nb”我可以做同样的事情并获得文化“nb-NO”。但是使用“nb”我得到了错误:

不支持文化 nb。

我会解释为什么我需要它。

我检索了一个文化列表:“nl-NL”、“nl-BE”、“nb-NO”、“fr-CH”、“fr-FR” 我想要一个具有默认文化的唯一语言列表。所以我创建了一个具有独特语言的列表,结果是“nl”、“nb”、“fr”。接下来我想要特定的文化,但 nb 不起作用。我想要这个是因为唯一列表选择了 nl-BE 而不是默认的 nl-NL。

But then I'll just stick with "nl-BE" when Dutch is selected and place the cultures in a unique cultures list. 此列表将导致“nl-BE”、“nb-NO”、“fr-CH”。

4

2 回答 2

2

我不明白为什么这不起作用。下面这三个名字给了我正确的文化

尝试:

CultureInfo c = CultureInfo.CreateSpecificCulture("nb-NO");

单元测试:

        [Test]
    public void CultureTest()
    {
        var c = CultureInfo.CreateSpecificCulture("nb-NO");

        Assert.AreEqual("Norwegian, Bokmål (Norway)",c.DisplayName);
        Assert.AreEqual("nb-NO", c.Name);
        Assert.AreEqual("norsk, bokmål (Norge)", c.NativeName);

        var c2 =
            CultureInfo.CreateSpecificCulture("nb");

        Assert.AreEqual("Norwegian, Bokmål (Norway)", c2.DisplayName);
        Assert.AreEqual("nb-NO", c2.Name);
        Assert.AreEqual("norsk, bokmål (Norge)", c2.NativeName);

        var c3 =
            CultureInfo.CreateSpecificCulture("NO");

        Assert.AreEqual("Norwegian, Bokmål (Norway)", c3.DisplayName);
        Assert.AreEqual("nb-NO", c3.Name);
        Assert.AreEqual("norsk, bokmål (Norge)", c3.NativeName);


    }
于 2012-01-16T14:48:32.823 回答
2

您不能假设语言名称和 CultureInfo 对象之间的父子关系之间存在对应关系。层次结构还取决于 Windows 版本。

根据NLS API的文档,“nb”文化存在于 Windows 7 上,但不存在于 Windows Vista 上。

在我的 Windows 7 机器上,Bokmål 的文化层次结构是从子到父的顺序

  • 铌-NO
  • NB
  • 不变的文化

简而言之,您应该使用 CultureInfo 对象的 Parent 属性,而不是进行字符串操作。

于 2012-01-16T15:15:53.640 回答