Solución:
@dkarp da una excelente respuesta general. Agregaré algunos detalles adicionales con respecto al chino:
Hay varios países donde el chino es el principal idioma escrito. La principal diferencia entre ellos es si usan caracteres simplificados o tradicionales, pero también existen pequeñas diferencias regionales (en vocabulario, etc.). La forma estándar de distinguirlos sería con un código de país, p. Ej. zh_CN
para China continental, zh_SG
para Singapur, zh_TW
para Taiwán, o zh_HK
para Hong Kong.
China continental y Singapur utilizan caracteres simplificados y los demás utilizan caracteres tradicionales. Dado que China y Taiwán son los dos con mayor población, solo zh_CN
y zh_TW
se utilizan a menudo para distinguir las versiones de caracteres tradicionales y simplificadas de un sitio web.
Más técnicamente correcto pero no se usa comúnmente en la práctica, sin embargo, sería utilizar zh_HANS
para caracteres chinos simplificados (genéricos), y zh_HANT
para los caracteres chinos tradicionales, excepto en casos excepcionales en los que es significativo distinguir diferentes países.
De hecho, existe una representación estándar para esto. A medida que la gente se ha topado con el mismo problema que está viendo, el mismo idioma, pero diferentes dialectos o caracteres, han ampliado el código de idioma de dos letras con un código de región de dos letras. Por lo tanto, es posible que tenga una página en francés universal en mydomain.com/fr
, pero la internacionalización para los lectores francocanadienses puede dejarlo con una mydomain.com/fr_CA
(Canadá) y mydomain.com/fr_FR
(Francia). Algunas plataformas usan un guión en lugar de un guión bajo para separar los códigos de idioma y región (por lo tanto fr-CA
y fr-FR
).
La configuración regional estándar para chino simplificado es zh_CN
. La configuración regional estándar para el chino tradicional es zh_TW
.
Dudo en señalarles los documentos de estándares BCP 47 reales, ya que son, eh, un poco pesados en los detalles y un poco ligeros en la legibilidad. Simplemente use identificadores de configuración regional estándar, como los que usa Java, y estará bien.
El idioma depende de dónde se hable (¡doh!), Por lo que los códigos de idioma y ubicación reflejan esa realidad. zh
es el código de lenguaje básico, pero debido a que hay dos formas principales de él, hay zh_Hans
y zh_Hant
, pero siguen siendo solo códigos de idioma, no locales.
Específico de la ubicación
Para especificar completamente qué idioma se usa en un especial ubicación, el código de país aún debe tener un sufijo, por lo que zh_Hans_HK
y zh_Hant_HK
para chino simplificado y tradicional, respectivamente, ambos tal como se hablan en Hong Kong.
En realidad, la realidad es que en muchos países a menudo se requiere algo más específico que el código de país, pero es probable que aumente exponencialmente la complejidad y el mantenimiento de bases de datos como CLDR, además de la infraestructura de soporte para alimentarlas, como la extracción de datos de IP para ubicación. , no está disponible en general o no es lo suficientemente precisa.
Texto fijo
Ahora, si el código es solo para especificar qué conjunto de cadenas fijas usar en la interfaz de usuario, o incluso conjuntos de páginas enteras en un sitio, un sufijo de país no es realmente necesario, a menos que haya más de unos pocos lugares donde el idioma varía. lo suficientemente significativo (información basada en la ubicación) como para molestarse en crear un conjunto de recursos completamente separado.
Cuanto mayor sea el conjunto de recursos, más probable es que un código de idioma basado en la configuración regional [in this context, just a language attribute, rather than a true locale, so you can call it what you like!] será necesario, pero al menos solo tiene que hacerlo cuando sea necesario.
Valores sobre la marcha
Sin embargo, si desea formatear valores de variables particulares, como fechas, horas, monedas y números, las configuraciones regionales sobre la marcha se vuelven importantes, porque todas las herramientas que admiten dicha funcionalidad (como las basadas en datos Unicode CLDR) las esperan. El lugar para estos debe ser un ajuste separado al código para el que está configurado el uso de un lenguaje de interfaz de usuario generado internamente, a menos que desee crear un conjunto de recursos para cada local conocido y manténgalos hasta la saciedad.
Herramientas de idioma del navegador
Tenga en cuenta que al especificar la configuración regional de una página web que se puede editar, como en los cuadros de entrada, y se ha habilitado el corrector ortográfico en los atributos o css para el campo, las herramientas de idioma del navegador revisarán la ortografía del campo de acuerdo con esa configuración regional.
Criterios
Debe tener claro lo que proporciona el conjunto de recursos, así que considere:
- Cuerdas fijas? Solo idioma.
- ¿Formatear sobre la marcha? Lugar.
- ¿Corrección ortográfica en el entorno de visualización? Lugar.
- ¿Páginas completas / subsitio? Solo idioma, de lo contrario, configuración regional (como una variante de idioma) si se requiere contenido significativamente diferente.
Hoja de cálculo para minimizar los gastos generales de mantenimiento
Utilizo una hoja de cálculo para contener cadenas de interfaz de usuario donde cada código de idioma tiene un código principal, de modo que la celda para su versión de una cadena tiene una fórmula que obtiene su cadena del padre. Para crear una cadena personalizada para ese idioma y cadena, simplemente sobrescribo la fórmula de la celda con el texto exacto. Eso minimiza la cantidad de mantenimiento de recursos. Ejecuto una macro al final que genera un archivo de recursos completo para cada idioma.