localization - internationalisation - Mejores prácticas para escribir software para ser consumido internacionalmente(i18n)
internationalisation or internationalization (6)
Datos
- Cuando vaya a UTF-8, prepárese para que los caracteres ocupen hasta 3 bytes cada uno (en el caso del chino), lo que significa que VARCHAR (20) ahora necesita ser un VARCHAR (60).
- A menos que realmente tenga una buena razón para hacerlo, por el amor de Dios, no almacene sus traducciones de UI en la base de datos.
Negocio
- Dedique mucho tiempo a los requisitos. Como punto de partida, tome una captura de pantalla de cada una de las pantallas de su aplicación, colóquela en un documento y comience a dibujar cuadros sobre las cosas que necesitan el soporte de i18n. Luego mapea cada una de esas cajas en un área de código que necesita cambiar.
UI
No lo hagas
string foo = "Page " + currentPage + " of " + totalPages;
Hacer
string foo = string.Format("Page {0} of {1}", currentPage, totalPages);
¿Por qué? El orden de la palabra importa.
<value>Page {0} of {1}</value>
<value>{1}ページ中の第{0}ページ</value>
Nada es sagrado en la interfaz de usuario. Incluso algo tan fundamental como mostrar verde para números positivos y rojo para números negativos es juego limpio .
Estoy buscando opiniones de expertos que hayan escrito software consumido internacionalmente. Me gustaría comprender las mejores prácticas que la gente ha empleado en cada capa de softare lógica (Datos (rdbms), Negocios (middleware), Interfaz de usuario).
Gracias por cualquier ayuda que usted puede dar.
Asegúrese de que haya suficiente espacio libre en los controles de IU. El texto tiende a ser mucho más extenso cuando se traduce del inglés a algo como el francés o el alemán.
Aunque se centra algo en el lado de Windows de las cosas i18n, preste atención al blog de Michael Kaplan . Él es muy versado en este campo, y ha publicado muchas publicaciones en blogs que contienen cosas generales que son útiles.
Para la localización, no codifique las cadenas de UI. Usa algo como gettext.
Si usa .Net, el sistema de archivos de recursos (.resx) es muy flexible.
Busque los usos de ResourceManager.GetString ("string name", CultureInfo).
Utilizamos este sistema para alternar entre inglés, alemán, francés, español, ruso y árabe con bastante éxito.
Además, al considerar el uso en entornos locales extranjeros, dedique un tiempo a analizar los datos de entrada y los resultados; el problema turco es un buen ejemplo de cómo diferentes entradas pueden causar problemas.
Unicode (o wchar, o lo que sea su equivalente en <idioma de elección> es) en todas partes. No almacene etiquetas en la base de datos. Esté preparado para permitir que el texto y los controles vayan "por el camino equivocado", es decir, de derecha a izquierda.
Podrías escribir un libro sobre este tema.
En todas las capas, no haga suposiciones sobre:
- ancho del texto
- direccionalidad de texto
- tokenización del lenguaje natural
- moneda (formato, precisión decimal, impuestos, etc.)
- gramática y ortografía
- alfabetos
- sistemas numéricos y formateo
- Orden de clasificación
- fechas, horas, zonas horarias y calendarios
- convenciones sociales o referencias culturales (iconos, banderas, etc.)
- buscando
- capitalización
- direcciones
- nombres propios (nombre / apellido, etc.)
- números telefónicos
- requisitos legales / regulatorios
- uso de números de seguro social u otras convenciones locales
Estoy seguro de que solo estoy rascando la superficie.