2012-05-18 29 views
19

En general, los métodos de traducción toman una asignación de clave> valor y usan la clave para transformar eso en un valor. Ahora reconozco dos métodos diferentes para nombrar sus claves de traducción y dentro de mi equipo no llegamos a un consenso sobre cuál es el mejor método.Práctica recomendada para valores clave en archivos de traducción

Método 1: Uso palabras en inglés completas o frases:

Name => Name 
Please enter your email address => Please enter your email address 

Método 2: Use palabras clave que describen la situación:

NAME => Name 
ENTER_EMAIL => Please enter your email address 

yo personalmente prefiero el método # 1 porque muestra directamente el significado del mensaje. Si la traducción no está presente, puede recurrir a la clave y esto no causa ningún problema. Sin embargo, el método es engorroso cuando una traducción cambia con frecuencia, porque todos los archivos deben actualizarse. También para textos más largos estas teclas se vuelven muy grandes. Esto se resuelve usando claves como ENTER_EMAIL, pero el fraseo está completamente fuera del contexto. La lista de claves abstractas de traducción sería enorme, necesita metadatos para todas las claves que explican su uso y las colisiones pueden ser mucho más fáciles.

¿Hay lo mejor de ambos mundos o un tercer método? ¿Cómo utilizas las claves de traducción en tu aplicación? En nuestro caso, se trata de una aplicación web basada en php, pero creo que el problema anterior es lo suficientemente genérico como para hablar de i18n en general.

+0

Interesante pregunta. Tiendo a favorecer también al # 1, pero voy híbrido cuando la situación lo amerite. –

+1

Prefiero el # 2 con el requerimiento, por supuesto, de SIEMPRE que haya una entrada en inglés (o en el idioma original). Cada registro también debe incluir una fecha/hora para la última actualización para señalar los mensajes que han cambiado y la necesidad de traducciones actualizadas. Por separado, se debe almacenar un registro que indique cuál es el idioma original. –

Respuesta

18

Esta es una pregunta que también enfrentan los desarrolladores de iOS/OSX. Y para ellos hay incluso un standard tool called genstrings que asume el método 1. Pero, por supuesto, los desarrolladores de Apple no tienen que usar esta herramienta, yo no.

Si bien la red de seguridad que obtiene con el método 1 es agradable (es decir, puede mostrar la clave si de alguna manera se olvidó de localizar una cadena) tiene la desventaja de que puede conducir a claves conflictivas. A veces, una pieza idéntica de texto de visualización necesita ser localizada de dos maneras diferentes, debido a reglas gramaticales o diferencias en el contexto. Por ejemplo, la traducción al francés de "E-mail" sería "E-mail" si es un título de diálogo y "Envoyer un e-mail" si es un botón (en francés, la palabra "E-mail" es solo un nombre y no se puede usar como un verbo, a diferencia de en inglés donde es tanto un sustantivo como un verbo). Con el método 2, podría tener las claves EMAIL_TITLE y EMAIL_BUTTON para resolver este problema, y ​​como una bonificación, esto daría una pista a los traductores para ayudarlos a traducir correctamente.

Una ventaja más del método 2 es que puede cambiar el texto en inglés sin tener que preocuparse de actualizar la clave en inglés y en todas sus localizaciones.

¡Así que recomiendo el método 2!

+0

Su ejemplo de 'EMAIL_TITLE' y' EMAIL_BUTTON' es muy bueno, sin embargo, no creo que sea realista. Como desarrollador inglés, no conoces este caso francés. Entonces, usted escribe 'E-mail' (# 1) o' EMAIL' (# 2) en primer lugar. Luego, su traductor de francés regresa con el mensaje que necesita dos claves, por lo que puede cambiar el botón a 'Correo electrónico (botón)' (n. ° 1) o 'EMAIL_BUTTON. (N. ° 2). El proceso para ambos métodos es el mismo, al final tienes una colisión y necesitas resolver eso. ¿Cuál es tu pensamiento sobre esto? –

+1

Los desarrolladores deben conocer algunas reglas de internacionalización. No tienen que conocer un idioma en particular, solo que, en este caso, no se puede esperar que un fragmento de texto sea reutilizable en diferentes contextos (incluso cuando no es un problema en inglés). Por lo tanto, al desarrollar su aplicación, cuando introduce una nueva cadena para un botón "Correo electrónico", agrega una entrada a su tabla de cadenas incluso si ve que ya tiene "Correo electrónico" pero para un contexto diferente. – Clafou

+0

Tenga en cuenta que para muchas plataformas esta regla de no reutilización se ve favorecida por el hecho de que las vistas de UI se localizan en paquetes y no se escribe código para cargar cada texto de tablas de cadenas (por lo que a menudo se obtienen varias instancias de una misma pieza de texto en inglés para traducir, pero está bien, ya que su contexto puede ser diferente) – Clafou

1

¿Por qué no utilizar ambos mundos? Utilizo el método n. ° 1 para cadenas cortas, y el método n. ° 2 para cadenas largas que son oraciones completas. No tengo miedo de mezclar ambos en el mismo archivo.

Por ejemplo, en la siguiente cadena de texto puede cambiar si en una nueva versión de la aplicación se modifica la experiencia del usuario:

"screen description" = "Tap the plus button to add a new item. Tap an item for more options or to edit its details."; 

Así que aquí tiene sentido aplicar el método # 2. Sin embargo, para las cadenas simples como en el siguiente ejemplo, el método # 1 es más útil:

"Preferences" = "Preferences"; 

En general cuando la gente trata de normalizar las cosas a menudo parece restrictiva para mí. Personalmente, prefiero un enfoque más "anarquista" donde varios métodos son válidos (no solo como en este método # 1 vs thread # 2 del método, sino también, por ejemplo, cuando un equipo de desarrolladores pelea por el estilo de codificación).

Cuestiones relacionadas