ASP.NET使用语言代码nb创建特定文化(Bokmål)

时间:2012-01-16 14:42:20

标签: c# asp.net culture country

我有一个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。

但是当选择荷兰语时,我会坚持使用“nl-BE”,并将文化放在一个独特的文化列表中。该列表将产生“nl-BE”,“nb-NO”,“fr-CH”。

2 个答案:

答案 0 :(得分: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);


    }

答案 1 :(得分:2)

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

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

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

  • NB-NO
  • nb的
  • 没有
  • 不变文化

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