Pregunta

He leído el artículo de Joel sobre Unicode y siento que tengo en menos una comprensión básica de la internacionalización desde una perspectiva de conjunto de caracteres. Además de leer esta pregunta , también he realizado algunas de mis propias investigaciones sobre internacionalización en Respecto a las consideraciones de diseño, pero no puedo evitar sospechar que hay mucho más por ahí que simplemente no sé o no sé preguntar.

Algunas de las cosas que he aprendido:

  • Algunos idiomas se leen de derecha a izquierda en lugar de izquierda a derecha.
  • Calendario, fechas, horas, moneda y los números se muestran de manera diferente de un idioma a otro.
  • El diseño debe ser lo suficientemente flexible como para acomodar mucho más texto porque algunos idiomas son mucho más detallados que otros.
  • No tome iconos o colores para concedido cuando se trata de su significado semántico ya que esto puede variar de cultura en cultura.
  • La nomenclatura geográfica varía de idioma a idioma.

Dónde estoy:

  • Mi diseño es lo suficientemente flexible como para acomodar mucho más texto.
  • Traduzco automáticamente cada cadena, incluidos mensajes de error y cuadros de diálogo de ayuda.
  • Todavía no he llegado a un punto donde He necesitado mostrar unidades de tiempo, moneda o números, pero estaré allí en breve y tendrá que desarrollar una solución.
  • Estoy usando el juego de caracteres UTF-8 en todos los ámbitos.
  • Mis menús y varias listas en la aplicación están ordenados alfabéticamente para cada idioma para facilitar la lectura.
  • Tengo un analizador de etiquetas que extrae etiquetas mediante el filtrado de palabras de parada. los lista de palabras de parada es específica del idioma y se puede cambiar.

Lo que me gustaría saber más sobre: ??

  • Estoy desarrollando una aplicación web PHP descargable, así que cualquier consejo específico con respecto a PHP sería muy apreciado. He desarrollado mi propio marco y no estoy interesado en usar otro marcos en este momento.
  • Sé muy poco sobre no occidental idiomas ¿Hay específicos consideraciones que deben tomarse en cuenta que no he mencionado ¿encima? Además, ¿cómo funciona la matriz de PHP funciones de clasificación manejan no occidental personajes?
  • ¿Hay algún truco específico que has experimentado en la práctica? Estoy buscando tanto en términos de la GUI como del código de la aplicación en sí.
  • Cualquier consejo específico para trabajar con muestra fecha y hora? Hay un desglose según la región o idioma?
  • He visto muchos proyectos y sitios dejar que sus comunidades proporcionen traducción para sus aplicaciones y contenido. ¿Recomiendas esto? y cuáles son algunas buenas estrategias para asegurando que tengas un buen traducción?
  • Esta pregunta es básicamente el alcance de lo que sé internacionalización Que no sé que no sé que debería ¿buscas más?

Editar : agregué la recompensa porque me gustaría tener más ejemplos del mundo real por experiencia.

¿Fue útil?

Solución

Nuestro juego Gemsweeper ha sido traducido a 8 idiomas diferentes. Algunas cosas que aprendí durante ese proceso:

  • Si el traductor recibe oraciones simples para traducir, asegúrese de que sepa sobre el contexto en el que se usa cada oración. De lo contrario, podría proporcionar una posible traducción, pero no la única. te referías. Herramientas como Babelfish traducen sin comprender el contexto, por lo que el resultado suele ser tan malo. Simplemente intente traducir cualquier texto no trivial del inglés al alemán y viceversa y verá lo que quiero decir.

  • Las oraciones que deben traducirse no deben dividirse en diferentes partes por la misma razón. Eso es porque necesita mantener el contexto (ver punto anterior) y porque algunos idiomas pueden tener variables al principio o al final de la oración. Use marcadores de posición en lugar de dividir la oración. Por ejemplo, en lugar de

  

" Este es el paso " " de nuestros 15 pasos   tutorial "

Escribe algo como:

  

" Este es el paso% 1 de nuestro tutorial de 15 pasos "

y reemplace el marcador de posición mediante programación.

  • No esperes que el traductor sea divertido o creativo. Por lo general, no está lo suficientemente motivado para hacerlo a menos que nombres los pasajes de texto en particular y le pagues más. Por ejemplo, si tiene chistes y palabras en sus recursos lingüísticos, dígale al traductor en una nota al margen que no intente traducirlos, sino que los omita o los reemplace con una oración más sombría. De lo contrario, el traductor probablemente traducirá el chiste palabra por palabra, lo que generalmente resulta en una completa tontería. En nuestro caso, tuvimos un traductor y un escritor de chistes para la traducción más crítica (inglés).

  • Trate de encontrar un traductor cuyo primer idioma sea el idioma al que va a traducir su software, no al revés. De lo contrario, es probable que escriba un texto que podría ser correcto, pero suena extraño o anticuado para los hablantes nativos. Además, debería estar viviendo en el país al que se dirige con su traducción. Por ejemplo, un chico de habla alemana de Suiza no sería una buena opción para una traducción al alemán.

  • Si es posible, haga que uno de sus usuarios públicos de prueba beta que entienda la traducción particular verifique los activos traducidos y el software completado. Hemos tenido algunas traducciones muy buenas y muy malas, dependiendo de la persona que lo proporcionó. Según algunos de nuestros usuarios, la traducción al sueco era una tontería total, pero era demasiado tarde para hacer algo al respecto.

  • Tenga en cuenta que, para cada versión actualizada con nuevas funciones, tendrá que traducir sus recursos de idiomas. Esto puede generar algunos gastos generales graves.

  • Tenga en cuenta que los usuarios finales esperarán que el soporte técnico hable su idioma si su software se traduce. Una vez más, Babelfish probablemente no lo hará.

Editar - Algunos puntos más

  • Haga que el cambio entre localizaciones sea lo más fácil posible. En Gemsweeper, tenemos una tecla de acceso rápido para cambiar entre diferentes idiomas. Hace que las pruebas sean mucho más fáciles.

  • Si va a utilizar fuentes exóticas, asegúrese de que éstas incluyan caracteres especiales. Las fuentes que elegimos para Gemsweeper estaban bien para texto en inglés, pero tuvimos que agregar bastantes caracteres. a mano que solo existen en alemán, francés, portugués, sueco, ...

  • No codifique su propio marco de localización. Probablemente esté mucho mejor

Otros consejos

  
      
  • Mis menús y varias listas en el   las aplicaciones se ordenan alfabéticamente   para cada idioma para facilitar la lectura.
  •   
Las listas

deben ordenarse, los menús no. tenga en cuenta que un usuario determinado puede querer usar su aplicación en más de un idioma, aún debe encontrarlo en todas partes en el mismo lugar.

lo mismo con los accesos directos, si tiene alguno: no los traduzca .

también, recuerde que la internacionalización y la traducción son dos cosas muy diferentes, adminístrelas por separado.

Cuando trabajamos en los temas i18n / l10n de Dreamfall y Age of Conan, nos encontramos con algunos problemas que vale la pena tener en cuenta. Algunos de estos los resolvimos, algunos se resolvieron por nosotros y otros los solucionamos. Algunos nunca los resolvimos ...

  • Asegúrese de que todas sus herramientas y todo su código sean compatibles con todos los conjuntos de caracteres que desea usar, y verifique dos veces esa suposición durante el curso del proyecto y un par de veces más para estar seguro.

  • Asegúrese de utilizar una fuente que admita todos los idiomas que desea utilizar. La mayoría de las fuentes que dicen ser unicode son solo unicode en el sentido de que los caracteres que tiene están en el punto de código correcto. No significa que tenga caracteres utilizables para todos los puntos de código.

  • El ajuste de texto no solo se realiza en espacios, ya que algunos idiomas no usan espacios para separar palabras (viene a la mente el chino). Asegúrese de que sus rutinas de ajuste de texto manejen el texto sin espacios.

  • El manejo correcto del plural es complicado en los casos fáciles y condenadamente difícil en los casos difíciles. Asegúrese de saber lo suficiente sobre los idiomas que utilizará para poder escribir código para manejar el problema plural correctamente. Tenga en cuenta que el inglés (y los otros idiomas occidentales se encuentran entre los más fáciles.

  • Nunca rompa oraciones y construya cadenas con ellas para que se ajusten a una variable, ya que la variable podría colocarse en otro lugar de la oración en un idioma diferente. Use marcadores de posición.

  • Tenga en cuenta que para algunos idiomas, el valor del marcador de posición puede cambiar la forma de escribir la oración. La gramática es difícil. Asegúrese de tener un plan para enfrentarlo. (Específicamente, asegúrese de tener una manera de clasificar los valores que utiliza en los marcadores de posición de acuerdo con el género, el tiempo, etc.).

Me gustaría hacer los siguientes comentarios: estos son de algunas pautas de la compañía donde los productos de clase 1 se traducen en 31 diferentes configuraciones regionales. Seguir estas pautas nos ha dado (a nuestro equipo de desarrollo en lugar de a toda la empresa) la mayor productividad en traducción.

  • No intente reutilizar fragmentos de mensajes de error. Por ejemplo, no piense que debido a que tiene los dos errores " Seleccionó el elemento de menú incorrecto " y " Ese elemento de menú aún no está disponible " puede extraer " elemento de menú " en un elemento separado y usarlo en ambos lugares. Todos los mensajes deben ser independientes ya que sus traducciones pueden cambiar según el contexto.

  • Utilice un traductor profesional con conocimientos sobre tecnología. Si se acerca a un servicio como BabelFish, obtendrá todo lo que se merece. Por ejemplo, " Microsoft Windows " es " Microsoft Windows " en todo el planeta, no se convierte en " Microsoft Fenster " en Alemania.

  • Intente no incrustar variables en sus mensajes (como " El% 1 ha fallado " donde % 1 cambia dinámicamente) ya que las posiciones y, de hecho, el género pueden cambiar: " La table est basura " vs. " L'Homme est borracho " , o " La tabla roja " vs " La table rouge " . Es mejor usar un nombre genérico con parámetros agregados: " El elemento ha fallado [% 1] " .

  • Solo traduzca lo que se espera que el usuario vea . Los mensajes de registro en un archivo de registro (que solo usted usará) deben estar en inglés (o en su idioma nativo), no traducidos a algo como Swahili que no podrías leer de todos modos.

  • Los menús deben ordenarse por funcionalidad, no por orden de clasificación.

  • Las unidades traducibles deben almacenarse externas en el código y cargarse en tiempo de ejecución. Esto hace que la traducción sea un problema de simplemente enviar el archivo externo, no intentar calzar los cambios en el medio del código. También facilita la adición de otros idiomas en el futuro.

Eso es suficiente por ahora. Es mejor detenerse antes de que todos se duerman :-)

Una cosa sobre los números: en inglés, según tengo entendido, solo usa un singular con 1 y un plural con 2 o más. Me gusta: "Tienes 1 mensaje"; "2 mensajes"; "3 ... mensajes". En ruso, estas cosas se vuelven más complicadas. Utiliza singular para 1, 21, 31, 41 ... 101, 121 (por lo tanto, para todo lo que termina en 1, excepto cuando termina con 11). Luego usa caso genitivo singular para 2, 3, 4; 22, 23, 24; 32, 33, 34 ... 102, 103, 104; 122, 123, 124. Y en todos los demás casos, utiliza caso genitivo plural .

No es realmente difícil de implementar. Lo que es difícil es implementar algo que sepa cómo lidiar con cualquier idioma desconocido a priori con toda su rareza :-)

Y eso son solo números :-)

No tengo mucho que agregar a las excelentes respuestas hasta ahora, pero aquí hay algunas cosas para considerar y verificar.

  • No haga suposiciones. Esta es la regla de capturar todo. Es fácil asumir cosas que son específicas de una región o idioma y es difícil notar estas suposiciones.
  • Tenga mucho cuidado con las comparaciones de cadenas. Hay algunos idiomas, como el turco, que tienen letras que son similares a otras visualmente pero que son diferentes.
  • Utilice la pseudo traducción como prueba de humo. Si lee las cadenas traducidas de un archivo de recursos, cree una versión pseudo traducida del archivo que aún pueda entender pero que enfatice la capacidad y la capacidad de cada cadena traducible en la aplicación. Por ejemplo, rellene una cadena como " Cancelar " con algo como "¡CancelarXXXX!" para que sea tan amplio como su asignación para cadenas traducidas. Luego puede probar para verificar que cada cadena se muestre completamente. Crédito adicional por pegarse también en el carácter más complejo que probablemente se representará para verificar que se muestre correctamente en todos los lugares.
  • No haga suposiciones sobre diseños de teclado. " ASDW " puede ser un excelente conjunto de control de teclas direccionales para teclados QWERTY, pero una codificación rígida que hace que sea poco amigable, si no imposible, para personas con otros diseños de teclado.
  • Pruebe varias configuraciones de fecha, luego vuelva a probarlas. He visto problemas debido a algo tan pequeño como un formato diferente para "AM / PM". en entornos regionales. El mm / dd / aaaa frente a dd / mm / aaaa también aparece mucho, pero cada configuración aquí puede importar.
  • Pruebe varios formatos de números, luego vuelva a probarlos. No desea depender de separadores decimales o de miles, por ejemplo.
  • Pruebe con y sin un usuario conectado al servidor. Esto puede ser más específico de Windows, pero es muy fácil configurar un componente en el servidor de modo que use el usuario conectado configuraciones regionales mientras un usuario está conectado y una configuración regional predeterminada cuando el usuario no está conectado. Esto puede causar un comportamiento extraño e intermitente.
  • Prueba con varias configuraciones regionales y de idioma. Como ejemplo, Windows no solo tiene configuraciones regionales y de idioma, sino que IE tiene su propia configuración de idioma. El comportamiento de un cliente IE con en-us en primer lugar puede no ser siempre el mismo que uno con en-nz en primer lugar, por ejemplo.
  • Asegúrese de que su traductor entienda el negocio y los idiomas, luego verifique con alguien más. Tenga mucho cuidado cada vez que use la terminología específica de la aplicación. Si su programa usa palabras específicas para significar algo especial en la aplicación, asegúrese de que estén traducidas de manera similar en cada caso, incluido el texto de ayuda. Si tiene objetivos específicos de idioma, incluso podría llegar a traducir esas palabras con anticipación y asegurarse de que no se traducen mal en los idiomas de destino. Esto es más una cuestión de investigación de productos, pero puede hacer una diferencia en las palabras que se usan en la interfaz, y es más fácil para todos si esas palabras están en su lugar desde el principio. También desea evitar expresiones idiomáticas que no se traducen bien.

Bien, tenía más que decir de lo que pensaba ...

Una cosa que aprendí de la manera difícil: si tiene varios archivos que necesitan ser traducidos, incluya una etiqueta adicional en el nombre, para que luego pueda buscar esa etiqueta en toda su carpeta.

p. en lugar de nombrar un archivo 'sample-database.txt', nombre la versión en inglés 'sample-database-loc-en.txt', la versión italiana 'sample-database-loc-it.txt

Mi primera respuesta en StackOverflow, así que perdón si se dijo algo estúpido.

Desde mi experiencia:

  • PHP : gettext ha sido extremadamente útil;
  • idiomas no occidentales : UTF-8 en todas partes (código, DB) y hasta ahora lo estamos haciendo bien;
  • ¿Hay algún problema específico que haya experimentado en la práctica? Romper párrafos largos para i18n en oraciones diferentes puede ser menos costoso de traducir, si la cadena se repite más de una vez en el sitio solo necesita traducirlo una vez. Pero, tenga cuidado, si fragmenta el texto demasiados traductores perderán contexto;
  • He visto muchos proyectos y sitios que permiten a sus comunidades proporcionar traducción para sus aplicaciones y contenido. ¿Recomienda esto y cuáles son algunas buenas estrategias para garantizar que tenga una buena traducción? Si tiene una gran cantidad de voluntarios, hágalo, pero dependiendo de la cantidad de texto que tenga, es posible que realmente necesite un tonelada de voluntarios. Siempre asegúrese también de que alguien en quien confíe sea el líder de un proyecto de idiomas para ser el lector de pruebas que controle la precisión de la traducción.
  • Las reglas de clasificación / clasificación pueden diferir enormemente entre idiomas: ä está ordenado de manera diferente en alemán que en sueco. Por lo tanto, la clasificación debe ser específica de la cultura.
  • Mayúsculas / minúsculas pueden contener sorpresas: el alemán " agudo S " el carácter ß no tiene una versión en mayúscula y se transforma a '' SS '' o permanece en minúscula si la exactitud es importante. El turco tiene una i minúscula sin puntos y una I punteada en mayúscula
  • Para aplicaciones web multilingües, piense detenidamente cómo decidir qué versión mostrar y cómo incorporarla a la URL. El usuario siempre debe poder elegir manualmente el idioma, y ??desea que los motores de búsqueda encuentren diferentes versiones de idiomas bajo diferentes URL.
  • Algunos idiomas de Asia oriental (a saber, japonés y chino, tal vez otros) no tienen espacios entre palabras
  • El japonés (tal vez otros también) tiene versiones separadas ('' ancho completo '') de dígitos arábigos y espacio, e incluso dos versiones de algunos de sus propios caracteres (katakana de ancho medio y ancho completo).

Sí, este es un tema masivo . Hacerlo bien es mucho trabajo.

En mi programa utilizo una clave entera para cada texto y lo busco en un archivo según sea necesario según el idioma. No hay cadenas literales en ninguna parte del código, solo claves. Los defino con una " enumeración " en C ++, así que en realidad no estoy escribiendo números. Escribí una utilidad para sincronizar los diferentes archivos de idioma cuando agrego más enumeraciones y los traductores llenan los espacios en blanco.

Cada tecla también tiene información sobre herramientas asociada, imagen, método abreviado de teclado, etc.

En cuanto a horas y fechas ... de nuevo, esto es mucho más complejo de lo que piensas, pero ¿PHP no maneja esto por ti? (No sé, soy un chico de C ++ ...)

PHP representa cadenas internamente como flujos de bytes, y asume iso-8859-1, para los casos en que la codificación es importante. En su mayor parte, puede usar UTF-8 en todo el lugar, y estará bien. Un inconveniente, si su sitio recibe información de sus usuarios, es que nunca puede estar 100% seguro de que están enviando contenido en la codificación adecuada. Es posible que desee utilizar mb_detect_encoding para verificar la entrada o utilizar un campo oculto con " ; exótico " caracteres para verificar.

Tenga en cuenta que todas las funciones relacionadas con cadenas en PHP, que funcionan en base a caracteres, suponen que character = byte. Eso significa que generalmente no puede confiar en las funciones de cadena. Eche un vistazo a esta página para obtener más detalles.

Otro buen recurso para PHP es la hoja de trucos de Nick Nettleton .

Un tema que está muy relacionado con los juegos de caracteres / codificaciones es colación . Necesita sus intercalaciones para que coincidan con el idioma / cultura con la que está trabajando. Al menos en MySql (probablemente también en otros RDBMS), puede especificar la clasificación en diferentes niveles, como por base de datos, por tabla, por columna e incluso en la consulta misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top