2016-08-10 7 views
1

gefunden arbeite ich meine Desktop-Java-Anwendung zu übersetzen (unter Windows 10 OS), so bin ich mit gettext-common von http://code.google.com/p/gettext-commonsgettext-commons Ressourcenbündel nicht

Ich habe nach dem Tutorial Bereitstellung von gettext- gemeinsam: https://code.google.com/archive/p/gettext-commons/wikis/Tutorial.wiki

durch alle Schritte folgenden schaffe ich bekommen Messages_fr.class, Messages_en.class das Problem in gettext-common ist sie Messages_en.properties nicht .class, wenn ich Messages_en.properties erstellen (manuell) es funktioniert! und ich kann es nicht von Hand wird es dauern, für immer (ich habe mehr als 700 Sätze)

JAVA-Code:

static I18n i18n = I18nFactory.getI18n(ParserTest.class, 
      "resources.messages"); 

    public static void main(String args[]) { 

     for (int i = 0; i < 2; i++) { 
      if (i == 0) { 
       print("First run"); 
      } else { 
       print("Second run"); 
       i18n.setLocale(Locale.FRANCE); 
      } 

      print("Current locale: " + i18n.getLocale()); 

      print(i18n 
        .tr("This text is marked for translation and is translated")); 

      String mark = i18n 
        .marktr("This text is marked for translation but not translated"); 
      print(mark); 
      print(i18n.tr(mark)); 

      mark = i18n.tr("This is the {0}. text to be translated", 
        "chat (noun)"); 
      print(mark); 

      mark = i18n.tr("This is the {0}. text to be translated", 
        "chat (verb)"); 
      print(mark); 

      print(i18n.tr("chat (noun)")); 
      print(i18n.tr("chat (verb)")); 

      print(""); 
     } 

    } 

    private static void print(String text) { 
     System.out.println(text); 
    } 

Ich habe ein Problem mit diesem:

Problem 1: My Nachrichtendateien befinden sich unter resources/Messages Verzeichnis. Es enthält nur zwei Dateien: messages_en.class und messages_fr.class nicht messages_fr.properties und messages_en.properties.

Wenn ich versuche, den obigen Code auszuführen, um eine Warnung Ich erhalte: „Resource [Nachrichten], das, weil es keine .properties Dateien

Antwort

1

ich entscheide, mit Property zu arbeiten, so folgte ich alle Schritte und ich springe msgfmt (ich gehe nicht .class erstellen), damit ich verwenden msgcat mit --properties-output Option erstellen .prop schaften statt .class-

commend:

msgcat --properties-output msgs/fr.po -o src/com/i18n/Messages_fr.properties 

oder Shell-Skript po2pr.sh (./po2pr erstellen.sh fr)

if [ -z "$1" ]; then 
    echo "Please specify which language_country suffix(es) you want" 
    exit 1 
fi 

for lang in $* 
do 
    echo "Creating .properties template file for $lang" 

    msgcat --properties-output msgs/${lang}.po -o src/com/i18n/Messages_${lang}.properties 
msgs/messages.pot 
done 

Java-Code:

public class I { 

    private static I18n getI18n() { 
     I18n getI18n = I18nFactory.getI18n(I.class, "i18n.Messages"); 
     Locale Locale = new Locale("fr"); 
     getI18n.setLocale(Locale); 
     return getI18n; 
    } 

    public static String tr(String str) { 
     return getI18n().tr(str); 
    } 

    public static String tr(String text, Object o1) { 
     return getI18n().tr(text, o1); 
    } 

    public static String tr(String text, Object o1, Object o2) { 
     return getI18n().tr(text, o1, o2); 
    } 

    public static String tr(String text, Object o1, Object o2, Object o3) { 
     return getI18n().tr(text, o1, o2, o3); 
    } 

    public static String tr(String text, Object o1, Object o2, Object o3, 
      Object o4) { 
     return getI18n().tr(text, o1, o2, o3, o4); 
    } 

    public static String tr(String text, Object[] objects) { 
     return getI18n().tr(text, objects); 
    } 

} 

Hinweis:

1-Sie haben Messages_fr.properties

2- stellen Sie sicher, erstellen, dass Sie Ressourcenbündel in den Farbton erstellen src.com.i18n.Messages

1

für Java Resource gibt es zwei verschiedene Implementierungen:

  • Property für PROPERTIES-Dateien, weithin bekannt, faul Teilbelastung
  • Listresourcebundle, reinen Java-Code, * .class, mit Arrays, schnell, vollständig (init Zeit, Speichernutzung) zu laden.

Es scheint, dass die Gettext-Brücke ListResourceBundle oder seine eigene Implementierung von ResourceBundle aus Ihrer Beschreibung verwendet. Das ist in Ordnung.

Wie gezeigt, erstellt msgfmt aus einer gettext-Datei (.po) eine .class-Ressourcendatei.

Der Gettext-Prozess beginnt mit einer Vorlage für alle Sprachen, dem .pot und dann pro Sprache einer .po-Datei.

Ihre Tipps zur Verwendung von Maven könnte in der Tat wert sein.

Alle gesagt, vielleicht ist es nur Locale.FRENCH zu verwenden ist

Auch habe ich einen Unterschied zwischen Eigenschaften ~ und Listresourcebundles gesehen: man könnte "resources/messages" versuchen oder über den richtigen Fall (Kapital M) attent "resources.Messages"

+0

Dank @Joop_Eggen für Ihre Antwort, Akut habe ich versucht "Ressourcen/Nachrichten Es "und mit Kapital M, aber immer noch bekommen Ressourcenpaket nicht gefunden, jetzt versuche ich eine JAR-Datei zu erstellen enthält alle. Klasse Ich werde sehen, ob es funktionieren wird. – Adel

Verwandte Themen