Pregunta

Tengo un sitio web ASP.NET 3.5.

¿Por qué no puedo crear una cultura específica para el idioma Bokmal de esta manera:

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

El idioma "en" funciona bien, da como resultado "en-US".Pensé que con "nb" podría hacer lo mismo y obtener la cultura "nb-NO".Pero con "nb" obtengo el error:

No se admite la cultura nb.

Explicaré por qué lo necesitaba.

Recuperé una lista de culturas: "nl-NL", "nl-BE", "nb-NO", "fr-CH", "fr-FR" Lo que quería era una lista única de idiomas con las culturas predeterminadas.Entonces creo una lista con idiomas únicos que dan como resultado "nl", "nb", "fr".Lo siguiente que quiero es las culturas específicas, pero nb no funciona.Quería esto porque la lista única seleccionó nl-BE en lugar del nl-NL predeterminado.

Pero luego me quedaré con "nl-BE" cuando se seleccione holandés y colocaré las culturas en una lista de culturas única.Esta lista dará como resultado "nl-BE", "nb-NO", "fr-CH".

¿Fue útil?

Solución

No se puede asumir que existe una correspondencia entre los nombres de los idiomas y las relaciones entre padres e hijos entre los objetos CultureInfo.La jerarquía también depende de la versión de Windows.

Según la documentación de la API de NLS , el "nb"La cultura existe en Windows 7, pero no en Windows Vista.

En mi máquina con Windows 7, la jerarquía cultural de Bokmål es, en orden secundario a principal

  • nb-NO
  • nb
  • no
  • Cultura invariable

En resumen, debe usar la propiedad Parent del objeto CultureInfo, en lugar de realizar manipulaciones de cadenas.

Otros consejos

No veo por qué esto no funciona.Estos tres nombres a continuación me dan la cultura correcta

Prueba:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top