Pergunta

Tenho um site ASP.NET 3.5.

Por que não posso criar uma cultura específica para o idioma bokmal assim:

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

O idioma "en" funciona bem, resulta em "en-US".Eu pensei que com "nb" eu poderia fazer a mesma coisa e obter cultura "nb-NÃO".Mas com "nb" eu recebo o erro:

Cultura nb não é compatível.

Vou explicar por que preciso disso.

Recuperei uma lista de culturas: "nl-NL", "nl-BE", "nb-NO", "fr-CH", "fr-FR" O que eu queria era uma lista exclusiva de idiomas com as culturas padrão.Então, crio uma lista com idiomas exclusivos que resulta em "nl", "nb", "fr".Próxima coisa eu quero as culturas específicas, mas nb não funciona.Eu queria isso porque a lista exclusiva selecionou nl-BE em vez do nl-NL padrão.

Mas então vou ficar com "nl-BE" quando o holandês for selecionado e colocar as culturas em uma lista de culturas única.Esta lista resultará em "nl-BE", "nb-NO", "fr-CH".

Foi útil?

Solução

Você não pode presumir que haja uma correspondência entre os nomes dos idiomas e as relações pai-filho entre objetos CultureInfo.A hierarquia também depende da versão do Windows.

De acordo com a documentação da API NLS , o "nb"A cultura existe no Windows 7, mas não no Windows Vista.

Na minha máquina com Windows 7, a hierarquia de cultura para Bokmål é, da ordem dos filhos para os pais

  • nb-NO
  • nb
  • não
  • Cultura invariável

Resumindo, você deve usar a propriedade Parent do objeto CultureInfo, em vez de fazer manipulações de strings.

Outras dicas

Não consigo ver por que isso não está funcionando.Esses três nomes abaixo me dão a cultura correta

Experimente:

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


    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top