processus typique java i18n - l'envoi de fichiers de ressources aux entreprises de traduction à traduire

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

Question

Il y a des tas de tutoriels sur l'utilisation de Java ResourceBundles pour fournir l'interface utilisateur en plusieurs langues. Cependant, il y a un processus question en ce qui concerne l'interaction typique avec des sociétés de traduction que je ne peux pas sembler trouver une réponse à.

En supposant par exemple que je ne connais pas le français, et le besoin d'employer une société de traduction pour obtenir des traductions pour mon application, que je les envoyer

  1. Les propriétés de ressources par défaut fichier « whatever_en_US.properties », y compris la clé et la valeur anglaise, et de revenir « whatever_fr_FR.properties »?
  2. "whatever_fr_FR.properties" avec des valeurs vides et "whatever_en_US.properties" pour référence?
  3. une autre combinaison?
Était-ce utile?

La solution

Étant donné que votre question concerne un processus et non sur la technologie, je vais essayer de vous donner une explication complète. En supposant que vous avez l'application sans traduction préalable, le processus idéal devrait ressembler à:

  1. Envoyer des fichiers en anglais pour la traduction. En fonction de votre accord avec l'entrepreneur de traduction, vous pouvez utiliser:

    • Vos propriétés par défaut des fichiers (vous serez chargé de les renommer correctement)
    • tableur Excell contenant des clés, expression anglaise et une colonne vide pour la traduction
    • Gettext * .po fichier (s) si vous allez utiliser gettext
    • fichier de mémoire de traduction (s) (à savoir Trados * .tmx fichiers)
  2. Lorsque vous recevez des fichiers en arrière, vous mettez ces traductions en produits, à créer et localisé construire le tester. Certes, il y aura des problèmes d'interface. Certains d'entre eux, vous pouvez fixer vous-même, certains auront besoin de traduction supplémentaires (comme les chaînes codées en dur), d'autres doivent être traduits en raccourcissant. Encore une fois, vous engagerez entrepreneur de traduction et de leur fournir des chaînes qui doivent être (re) traduit. Vous pouvez utiliser une feuille de calcul ici (à condition qu'il n'y ait pas autant de chaînes qui doivent être traduits).

  3. Si vous voulez expédier simultanément (toutes les langues à la fois), vous devez engager des traducteurs tôt. Étant donné que les chaînes UI changeront (à condition qu'il n'y a pas la période ou le gel traduction dur gel-IU), vous devrez obtenir vos traductions mises à jour. Dans ce cas, vous devrez fournir des fichiers déjà traduits avec les chaînes qui doivent être traduites (en anglais). Si les changements sont vraiment petits, vous pouvez envoyer uniquement les chaînes en anglais et les traductions de fusion manuellement, sinon il est préférable d'utiliser une sorte de format d'échange de mémoire de traduction (gettext * de .po ou Trados * .tmx de sont grands ici).

  4. Traduction de fichiers est généralement pas suffisant. Comme, en général il n'y a pas de contexte donné et des mots différents peut signifier différentes choses dans une langue cible, des erreurs de traduction se produisent. Il n'y a aucun moyen de savoir qu'ils sont à moins que vous connaissez la langue. Voilà pourquoi vous devez prendre des captures d'écran et l'interface utilisateur de les envoyer pour examen (il pourrait être examiné par votre entrepreneur de traduction, ou quelqu'un d'autre en fonction des exigences de qualité).

  5. Une fois cet examen, vous devrez appliquer les modifications de traduction et test pour les questions UI ...

C'est à ce sujet, si nous parlons du processus de traduction de l'interface utilisateur. Mais s'il vous plaît noter qu'il ya beaucoup plus de localiser correctement une application (documentation, fichiers d'aide, icônes, couleurs, sons ...).

Autres conseils

Pour répondre à votre question, je choisirait (2).

Dans la pratique, je trouve que, pour moi, il est beaucoup plus facile à utiliser autre chose plutôt que les faisceaux de ressources Java.

J'utilise personnellement une autre façon de traiter ce sujet. J'utilise le chemin de gettext (il y a un fichier appelé il GetTextResource.java que vous devez utiliser dans votre application pour bénéficier des extensions gettext - voir poedit ). A partir des fichiers po vous créez la classe java que vous utiliserez dans votre application (ce qui est fait à l'aide msgfmt - paramètres spécifiant pour la compilation Java des fichiers po). Po fichiers peuvent être mis à jour en utilisant la commande assez facile xgettext (de la ligne de commande).

Bien sûr, tout est à l'intérieur gettext manuel.

Avantages:

  • gettext vous offre une façon de sélectionner la forme plurielle [Pas plus de messages comme: "le fichier N (s) supprimé" (où N est un nombre) - voir ngettext .

  • une méthode scriptable pour traduire les chaînes une fois que vos fichiers java sont mis à jour avec de nouveaux jetons

  • pas besoin d'accéder à chaque chaîne en utilisant des macros (comme Traduire (DELETE_BUTTON_MACRO)). Vous écrivez simplement votre code comme ceci:

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

Voici un exemple

    // example
    // similar for plural

    import static translateutil.TranslateUtil._;

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

Peu importe ce que votre choix est: Bonne chance

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top