típico proceso de Java i18n - el envío de archivos de recursos a las empresas de traducción para traducir

StackOverflow https://stackoverflow.com/questions/3721882

Pregunta

Hay un montón de tutoriales sobre el uso de Java ResourceBundles para proporcionar la interfaz de usuario en varios idiomas. Sin embargo, hay un proceso de trate en materia de interacción típica con empresas de traducción que me parece que no puede encontrar una respuesta a.

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

  1. Las propiedades de los recursos por defecto de archivos "whatever_en_US.properties", incluyendo la clave y el valor de Inglés, y volver "whatever_fr_FR.properties"?
  2. "whatever_fr_FR.properties" con valores vacíos y "whatever_en_US.properties" de referencia?
  3. alguna otra combinación?
¿Fue útil?

Solución

Debido a que su pregunta se refiere a un proceso y no sobre la tecnología, voy a tratar de darle una explicación exhaustiva. Asumiendo que usted tiene aplicación sin traducción anterior, el proceso ideal debe ser similar a:

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

    • Sus archivos de propiedades por defecto (que serán responsables de cambiar el nombre correctamente)
    • hoja de cálculo de Excel que contiene las llaves, 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 la memoria de traducción (s) (es decir Trados * .tmx archivos)
  2. Cuando reciba archivos de nuevo, se puso estas traducciones en el producto, cree acumulación localizada y probarlo. Sin duda, habrá algunos problemas de interfaz de usuario. Algunos de ellos se podría solucionar por su cuenta, algunos requieren traducción (como cuerdas codificado), otros requerirán acortar la traducción. Una vez más, vas a participar contratista de traducción y proveerlos de las cadenas que deben ser (re) traducidos. Se podría utilizar una hoja de cálculo aquí (siempre que no haya tantas cadenas que deben ser traducidas).

  3. Si usted quiere enviar simultáneamente (todos los idiomas a la vez), es necesario involucrar a los traductores temprano. Desde cadenas de la IU va a cambiar (siempre que no haya duro-UI-congelación periodo o periodo traducción de congelación), que tendrá que conseguir sus traducciones actualizadas. En este caso, tendrá que suministrar los archivos ya traducidos con las cadenas que deben ser traducidas (en Inglés). Si los cambios son muy pequeñas, se puede enviar sólo las cadenas en inglés y traducciones de combinación de forma manual, de lo contrario lo mejor es utilizar algún tipo de formato de intercambio de memorias de traducción (gettext * .po de o Trados * .tmx de aquí es estupendo).

  4. La traducción de archivos no suele ser suficiente. Dado que por lo general no existe un contexto dado y palabras diferentes puede significar diferentes cosas en un idioma de destino, se producen errores de traducción. No hay manera de saber que están en menos que sepa el idioma. Es por eso que necesita para tomar capturas de pantalla de interfaz de usuario y enviarlos para su revisión (que podría ser revisada por el contratista de la traducción, o alguien más, dependiendo de los requisitos de calidad).

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

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

Otros consejos

Para responder a su pregunta volvería a elegir (2).

En la práctica he encontrado que para mí es mucho más fácil con el uso de los paquetes de recursos Java alguna otra cosa en lugar de.

Yo personalmente uso una forma diferente de manejar esto. Yo uso la forma de gettext (hay un archivo allí llamado GetTextResource.java que debe utilizar en su solicitud de beneficiarse de las extensiones de gettext - vea aquí ).

si usted está familiarizado con gettext seguro que encuentra este enfoque mucho más fácil y práctico. Simplemente da a sus traductores los ficheros po (que puede ser modificado con poedit ). A partir de los archivos po crear la clase de Java que va a utilizar dentro de su aplicación (esto se hace usando MSGFMT - especificar parámetros para la compilación de Java de los archivos po). archivos po pueden actualizarse bastante fácil con el comando xgettext (de la línea de comandos).

Por supuesto que todo está dentro de la gettext manual de .

Ventajas:

  • ofertas gettext una manera de seleccionar la forma plural [No más mensajes como: "Expediente N (s) borrado" (donde N es un número) - véase 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 cuerda utilizando algunas macros (como Traducir (DELETE_BUTTON_MACRO)). Que acaba de escribir el código como el siguiente:

    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);
        }
    }
    }
    

Este es un ejemplo

    // example
    // similar for plural

    import static translateutil.TranslateUtil._;

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

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

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