2011-05-10 10 views
10

Estoy tratando de hacer 2 listas desplegables.Cómo hacer una lista desplegable de todas las culturas (pero no hay repeticiones)

El superior ofrece todas las culturas, (pero sin repeticiones). Ejemplo: inglés, español, filipino

Después de seleccionar de la lista superior, la lista inferior mostrará cualquier tipo específico.

Yo ahora uso este código para mi lista principal.

foreach (CultureInfo cultureInfo in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) 

Sin embargo no muestra filipino (Filipinas) prefiero no uso GetCultures (CultureTypes.AllCultures)), ya que muestra mucho a la vez.

Parece que podría necesitar cargar NeutralCultures en un IList. Luego itere a través de AllCultures para asegurarse de que ThreeLetterISOLanguageName esté en la lista, si no es de agregarlo.

¿Existe una buena práctica para esto?

Gracias

Respuesta

17

Mira la referencia para los diferentes valores de CultureTypes. Te dice lo que está incluido para cada uno.

Supongo que quieres todo lo que hay en todo menos las culturas específicas? Puede combinar todas las culturas no específicas en un conjunto o obtener todas las culturas y excluir las específicas. El segundo enfoque sería más fácil de expresar en LINQ:

var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures) 
          .Except(CultureInfo.GetCultures(CultureTypes.SpecificCultures)); 

Aunque parece que ya tiene CultureTypes atribuyen las banderas, podríamos también acaba de enmascarar el SpecificCultures al conseguir ellos.

var cultures = CultureInfo.GetCultures(
    CultureTypes.AllCultures & ~CultureTypes.SpecificCultures 
); 
+0

Gracias Jeff, que funciona muy bien. Me gusta cómo ha sido el inglés y el francés, más que los detalles. Lo que no entiendo es por qué tendrá checo "cs-CZ" pero no filipino "fil-PH". Ambos son específicos (solo 1 país cada uno). – aron

+0

@aron: No estoy seguro de entender lo que estás diciendo. La primera parte del nombre es solo el código [ISO 639-1 code] (http://en.wikipedia.org/wiki/ISO_639-1) mientras que la segunda parte es el [código ISO 3166] (http: // en.wikipedia.org/wiki/Iso_3166). El código ISO 639-1 solo se refiere a un idioma (un cultivo neutral no asociado con una región específica). Aunque la República Checa ('cs-CZ') utiliza la lengua checa (' cs'), no son equivalentes. Ambas son culturas específicas y no deberían enumerarse aquí. Si es así, probablemente sea un objeto cultural creado por usted (que está incluido). –

+0

En lugar de llamar a 'GetCultures' dos veces y usar' Except', puedes usar 'GetCultures (CultureTypes.AllCultures & ~ CultureTypes.SpecificCultures)' –

Cuestiones relacionadas