typische Java i18n Prozess - Ressourcendateien in Translation Unternehmen Senden übersetzt werden

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

Frage

Es gibt viele Tutorials auf Java Resource mit UI zu schaffen, in mehreren Sprachen. Allerdings gibt es einen Prozess Frage hinsichtlich der typische Interaktion mit Übersetzungsunternehmen, dass ich keine Antwort auf finden scheine.

Unter der Annahme zum Beispiel, dass ich nicht weiß, Französisch, und Notwendigkeit, ein Übersetzungsunternehmen zu beschäftigen Übersetzungen für meinen App zu bekommen, würde ich sie sende

  1. Die Standardressourceneigenschaften Datei „whatever_en_US.properties“ mit dem Schlüssel und Englisch-Wert und zurück „whatever_fr_FR.properties“?
  2. "whatever_fr_FR.properties" mit leeren Werten und "whatever_en_US.properties" Referenz?
  3. eine andere Kombination?
War es hilfreich?

Lösung

Da Ihre Frage ein Prozess geht und nicht um Technologie, ich werde versuchen, Ihnen ausführliche Erklärung zu geben. Unter der Annahme, dass Sie Anwendung ohne vorherige Übersetzung sollte das ideale Verfahren wie folgt aussehen:

  1. Senden Englisch Dateien für die Übersetzung. Je nach Ihrem Vertrag mit Übersetzung Auftragnehmer könnten Sie verwenden:

    • Ihre Standardeigenschaften-Dateien (Sie werden für die Umbenennung sie richtig verantwortlich)
    • Excell-Tabelle Tasten, Englisch Phrase und eine leere Spalte für die Übersetzung
    • enthalten
    • Gettext * .po Datei (en), wenn Sie gehen gettext
    • verwenden
    • Translation-Memory-Datei (en) (d Trados * .tmx Dateien)
  2. Wenn Sie Dateien zurück zu erhalten, setzen Sie diese Übersetzungen in Produkt, erstellen Sie lokalisierte Build- und Test-it out. Sicherlich wird es einige UI-Themen sein. Einige von ihnen das Sie selbst beheben können, werden einige zusätzliche Übersetzung benötigen (wie fest einprogrammiert Strings), andere benötigen Übersetzung verkürzt wird. Auch hier werden Sie Übersetzung Auftragnehmer und versorgen sie mit Strings, die (Wieder-) übersetzt werden müssen eingreifen. Sie könnten Tabelle verwenden hier (vorausgesetzt, dass es nicht so viele Strings, dass Bedarf übersetzt werden).

  3. Wenn Sie gleichzeitig versenden möchten (alle Sprachen auf einmal), müssen Sie Übersetzer früh engagieren. Da UI-Strings ändern wird (vorausgesetzt, es gibt keine harten UI-freeze Zeitraum oder übersetzungs Sperrfrist), werden Sie Ihre Übersetzungen aktualisiert werden müssen. In diesem Fall müssen Sie bereits übersetzten Dateien mit den Saiten liefern, die (in englischer Sprache) übersetzt werden müssen. Wenn die Änderungen wirklich klein sind, können Sie manuell nur die englischen Strings und merge Übersetzungen senden, sonst ist es am besten, eine Art von Translation Memory-Austauschformat zu verwenden (gettext * .po oder dem Trados * .tmx die sind toll hier).

  4. Dateien Übersetzen ist in der Regel nicht ausreichend. Da in der Regel kein Zusammenhang dort gegeben ist und verschiedene Worte verschiedene Dinge in einer Zielsprache bedeuten können, auftreten Übersetzungsfehler. Es gibt keine Möglichkeit zu wissen, dass sie in sind, wenn Sie die Sprache kennen. Deshalb sollten Sie UI Screenshots nehmen müssen und sie aussenden zur Überprüfung (durch Ihre Übersetzung Auftragnehmer überprüft werden könnte, oder jemand anders, je nach Qualitätsanforderungen).

  5. Sobald überprüft, müssen Sie Übersetzung Änderungen und Test für UI Fragen ...

  6. anzuwenden

Das ist es, wenn wir sprechen über UI-Strings Übersetzungsprozess. Aber bitte beachten Sie, dass es viel mehr korrekt eine Anwendung zu lokalisieren (Dokumentation, Hilfedateien, Icons, Farben, Klänge ...).

Andere Tipps

Um Ihre Frage zu beantworten, würde ich wähle (2).

In der Praxis fand ich für mich, dass es viel einfacher ist die Verwendung etwas anderes anstatt das Java Ressourcenbündels.

Ich persönlich benutze eine andere Art und Weise des Umgangs mit diesem. Ich benutze die gettext Weg (eine Datei GetTextResource.java genannt es ist, dass Sie in Ihrer Anwendung profitieren von den gettext Erweiterungen verwenden muss - siehe poedit ). Aus den po-Dateien Sie die Java-Klasse erstellen Sie in Ihrer Anwendung verwenden werden (dies erfolgt über msgfmt - Angabe von Parametern für Java-Kompilation der po-Dateien). Po-Dateien aktualisiert werden können, ziemlich einfach, den xgettext-Befehl (von der Kommandozeile).

Natürlich ist alles innerhalb des gettext Handbuch .

Vorteile:

  • gettext bieten Ihnen eine Möglichkeit, die Pluralform, um [Keine Nachrichten wie: "N-Datei (en) gelöscht" (wobei N eine Zahl ist) - siehe ngettext .

  • eine skriptfähige Methode für Strings, sobald Ihre Java-Dateien aktualisiert werden, mit neuem Tokens übersetzen

  • keine Notwendigkeit, den Zugang jeder String einige Makros (wie Übersetzen (DELETE_BUTTON_MACRO)). Sie schreiben Sie einfach Ihren Code wie folgt:

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

Hier ist ein Beispiel

    // example
    // similar for plural

    import static translateutil.TranslateUtil._;

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

Egal, was Sie Wahl ist: Viel Glück

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top