ASP.NET使用语言代码nb(Bokm;l)创建特定的区域性

本文关键字:创建 区域性 #129 NET 语言 代码 Bokm nb ASP | 更新日期: 2023-09-27 18:20:38

我有一个ASP.NET 3.5网站。

为什么我不能为博克马尔语创造一种特定的文化,就像这样:

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"。

ASP.NET使用语言代码nb(Bokm;l)创建特定的区域性

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

根据NLS API的文档,"nb"区域性存在于Windows 7上,但不存在于Windows Vista上。

在我的Windows7机器上,Bokmål的文化层次结构是,按子级到父级顺序

  • nb否
  • nb
  • 不变的文化

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

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

尝试:

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

UnitTest:

        [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);

    }