我有一个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”。
答案 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的文化层次结构是从子到父订单
简而言之,您应该使用CultureInfo对象的Parent属性,而不是进行字符串操作。