2010-09-15 26 views
5

Hay muchos tutoriales sobre el uso de Java ResourceBundles para proporcionar UI en varios idiomas. Sin embargo, hay una pregunta proceso en lo que respecta a la interacción típica con las empresas de traducción que parece que no puedo encontrar una respuesta.proceso típico java i18n - envío de archivos de recursos a compañías de traducción para ser traducido

Suponiendo por ejemplo, que no sé francés, y la necesidad de emplear una empresa de traducción para obtener traducciones de mi aplicación, me gustaría enviarles propiedades de los recursos

  1. el archivo default "whatever_en_US.properties incluyendo" la clave y el valor en inglés, y obtener "whatever_fr_FR.properties"?
  2. "whatever_fr_FR.properties" con valores vacíos y "whatever_en_US.properties" como referencia?
  3. alguna otra combinación?

Respuesta

4

Como su pregunta es sobre un proceso y no sobre tecnología, intentaré darle una explicación completa.Suponiendo que tiene una aplicación sin traducción previa, el proceso ideal debería ser similar a:

  1. Enviar archivos en inglés para su traducción. Dependiendo de su contrato con el contratista traducción que puede usar:

    • Sus archivos de propiedades por defecto (que serán responsables de cambiar el nombre correctamente) teclas
    • Excell hoja de cálculo que contienen, la frase Inglés y una columna vacía para la traducción
    • gettext * .po archivo (s) si se va a usar gettext
    • archivo de memoria de traducción (s) (es decir, Trados * archivos .tmx)
  2. Cuando reciba fi Atrás, coloque estas traducciones en el producto, cree compilación localizada y pruébela. Sin duda, habrá algunos problemas de UI. Algunos de ellos se pueden arreglar por su cuenta, algunos requerirán traducción adicional (como cadenas codificadas), otros requerirán acortar la traducción. Una vez más, contratará a un contratista de traducción y les proporcionará las cadenas que necesitan (re) traducirse. Puede usar la hoja de cálculo aquí (siempre que no haya tantas cadenas que deban ser traducidas).

  3. Si desea enviar simultáneamente (todos los idiomas a la vez), necesita contratar traductores temprano. Dado que las cadenas de interfaz de usuario cambiarán (siempre que no haya un período de congelación de la IU dura o un período de congelación de la traducción), deberá actualizar sus traducciones. En este caso, deberá proporcionar los archivos ya traducidos con las cadenas que deben traducirse (en inglés). Si los cambios son realmente pequeños, puede enviar solo las cadenas en inglés y fusionar las traducciones manualmente; de ​​lo contrario, es mejor utilizar algún tipo de formato de intercambio de memoria de traducción (gettext * .po's o trados * .tmx's son excelentes aquí).

  4. Traducir archivos no suele ser suficiente. Como generalmente no se da un contexto y las diferentes palabras pueden significar cosas diferentes en un idioma de destino, se producen errores de traducción. No hay forma de saber que están dentro a menos que conozcas el idioma. Es por eso que debe tomar capturas de pantalla de la interfaz de usuario y enviarlas para su revisión (podría ser revisada por su contratista de traducción u otra persona en función de los requisitos de calidad).

  5. Una vez revisada, que tendrá que aplicar los cambios de traducción y probar los problemas de interfaz de usuario ...

Eso es todo, si estamos hablando de la interfaz de usuario proceso de traducción cuerdas. Pero tenga en cuenta que hay mucho más para localizar correctamente una aplicación (documentación, archivos de ayuda, iconos, colores, sonidos ...).

+0

¡genial! Sé mucho de lo que planteas aquí, pero lo has aclarado organizándolo. Y con suerte los stackoverflowes futuros lo encontrarán útil. – jlarson

2

Para responder a su pregunta, yo elegiría (2).

En la práctica, encontré que para mí es mucho más fácil usar algo más que los paquetes de recursos de Java.

Yo personalmente uso una forma diferente de manejar esto. Utilizo gettext (hay un archivo llamado GetTextResource.java que debe usar en su aplicación para beneficiarse de las extensiones gettext - vea here).

Si está familiarizado con gettext definitivamente encontrará que este enfoque es mucho más fácil y práctico. Simplemente le da a sus traductores los archivos po (que se pueden editar con poedit). Desde los archivos po, usted crea la clase java que usará dentro de su aplicación (esto se hace usando msgfmt - especificando parámetros para la compilación java de los archivos po). Los archivos Po se pueden actualizar bastante fácilmente utilizando el comando xgettext (desde la línea de comandos).

Por supuesto, todo está dentro del gettext manual.

Ventajas:

  • gettext le ofrece una manera de seleccionar la forma plural [No hay más mensajes como: "N archivo (s) borrado" (donde N es un número) - ver ngettext.

  • un método de secuencias de comandos para la traducción de cuerdas una vez que sus archivos de Java se actualizan con nuevos tokens

  • sin necesidad de acceder a cada cadena usando algunas macros (como Translate (DELETE_BUTTON_MACRO)). Que acaba de escribir el código de la siguiente manera:

    package translateutil;   
    import gnu.gettext.GettextResource; 
    
    import java.util.ResourceBundle; 
    
    import java.util.Locale; 
    
    public class TranslateUtil 
    { 
    private static ResourceBundle myResources =null; 
    
    public static boolean init(Locale loc, String resourceName) 
    { 
        boolean bRet = true; 
        Locale.setDefault(loc); 
    
        try 
        { 
         myResources = ResourceBundle.getBundle(resourceName); 
    
         System.out.printf( _("Current language: %s\n"), 
              Locale.getDefault().getDisplayName()); 
    
         System.out.printf( _("%s resource found\n"), 
              myResources.getClass().getName()); 
        } 
        catch(Exception e) 
        { 
         // let the application go on in English in case the ResourceBundle 
         // was not found. Notify about the error 
         bRet = false; 
         System.out.println(e.toString()); 
         myResources = null; 
        } 
    
        return bRet; 
    } 
    
    
    public static String _(String str) 
    { 
        if (myResources == null) 
        { 
         return str; 
        } 
        { 
         return GettextResource.gettext(myResources, str); 
        } 
    } 
    
    public static String _Plural(String singular, String plural, long param) 
    { 
        if (myResources == null) 
        { 
         if (param == 1) 
         { 
          return singular; 
         } 
         else 
         { 
          return plural; 
         } 
        } 
        else 
        { 
         return GettextResource.ngettext(myResources, singular, plural, param); 
        } 
    } 
    } 
    

Aquí es una muestra

// example 
    // similar for plural 

    import static translateutil.TranslateUtil._; 

    System.out.println(_("The english text")); 

No importa lo que la elección es: Buena suerte!

+0

gracias por la respuesta completa ... De hecho, no estoy _realmente_ utilizando paquetes de recursos de Java, sino una solución patentada, PERO, pensé en preguntar sobre los recursos para simplificar la pregunta. – jlarson

Cuestiones relacionadas