9 Stimmen

Wie handhaben Sie die Internationalisierung für "Ihre Eingabe 'xyz' ist ausgezeichnet!"?

Ich würde gerne wissen, wie die Internationalisierung von Anweisungen mit hinzugefügten Laufzeitdaten richtig gehandhabt wird. Zum Beispiel 1) Ihre Eingabe "xyz" ist ausgezeichnet! 2) Sie waren "4 Jahre" alt, als Sie von "Barney and Freinds" zu "Spongebob" wechselten.

Die Werte in Anführungszeichen sind Benutzerdaten, die zur Laufzeit ermittelt oder berechnet werden. Meine Plattformen sind hauptsächlich Java/Android. Eine passende Lösung für westliche Sprachen wird einer schwächeren universellen Lösung vorgezogen.

12voto

BalusC Punkte 1034465

Java

Um lokalisierten Text (Nachrichten) abzurufen, verwenden Sie die java.util.ResourceBundle API. Um Nachrichten zu formatieren, verwenden Sie java.text.MessageFormat APIです。

Grundsätzlich erstellen Sie zunächst eine Eigenschaftsdatei etwa so:

key1 = Your input {0} is excellent!
key2 = You were {0} old when you switched from {1} to {2} shows.

Le site {n} Dinge sind Platzhalter für Argumente, die Sie per MessageFormat#format() .

Dann laden Sie es wie folgt:

ResourceBundle bundle = ResourceBundle.getBundle("filename", Locale.ENGLISH);

Um die Nachrichten nach Schlüssel zu erhalten, tun Sie dies:

String key1 = bundle.getString("key1");
String key2 = bundle.getString("key2");

Dann formatieren Sie es:

String formattedKey1 = MessageFormat.format(key1, "xyz");
String formattedKey2 = MessageFormat.format(key2, "4 years", "Barney and Friends", "Spongebob");

Siehe auch:


Android

Bei Android ist der Prozess einfacher. Sie müssen nur alle diese String Nachrichten im res/values/strings.xml Datei. Dann können Sie eine Version dieser Datei in verschiedenen Sprachen erstellen und die Datei in einem values der den Sprachcode enthält. Wenn Sie zum Beispiel Spanisch unterstützen möchten, müssen Sie nur einen Ordner mit dem Namen res/values-es/ und geben Sie die spanische Version Ihrer strings.xml dort. Android entscheidet automatisch, welche Datei abhängig von der Konfiguration des Mobiltelefons zu verwenden ist.

Siehe auch:

0 Stimmen

Um es klar zu sagen: Sie würden die Zeichenkette Your input '{0}' is excellent" an Ihre Übersetzer weiter, und übergeben Sie die Übersetzung (gespeichert in der Datei ResourceBundle a MessageFormat die dann Folgendes ersetzen wird {0} mit den von Ihnen bereitgestellten Inhalten.

2 Stimmen

Der vorgeschlagene Weg, dies auf Android zu tun, ist zu tun, was BalusC vorgeschlagen und legen Sie die Zeichenfolgen in res/values-xx/strings.xml-Dateien. Aber anstatt {0} zu verwenden, können Sie die Version von Context.getString() verwenden, die einen Format-String annimmt. (Siehe d.Android.com/reference/Android/content/Context.html ) Es nimmt die Standard-Java-Formatter-ähnlichen Zeichenketten. Ihr Wert würde also wie folgt aussehen: "Ihre Eingabe '%1$s' ist ausgezeichnet".

3voto

Pontus Gagge Punkte 16933

Eine nicht-technische Überlegung. Die Einbettung freier Daten in englische Phrasen wird in vielen Kulturen (einschließlich der westlichen), in denen eine grammatikalische Übereinstimmung z. B. in Bezug auf Zahl, Geschlecht oder Kasus erforderlich ist, nicht besonders gut aussehen. Ein eher telegrafischer Stil ist in der Regel hilfreich (z. B. Exzellente Eingabe: "xyz") - dann hat wenigstens jeder das gleiche Maß an Plumpheit!

0 Stimmen

Dies ist kein Problem, wenn Sie parametrisierte Platzhalter verwenden. Sie können sie grammatikalisch überall platzieren, wo Sie wollen.

0 Stimmen

Ich glaube, du verstehst nicht, worauf ich hinaus will. Die englische Grammatik ist im Vergleich zu den meisten westlichen (und anderen) Sprachen einfach. Wenn Sie String-Vorlagen im Englischen schreiben, müssen Sie mayo denken Sie daran, Alternativen für Singular und Plural bereitzustellen ("{0} ist ..." vs. "{0} sind ..."), aber Sie werden immer noch nicht in der Lage sein, Beschränkungen zu erfüllen, welche Wortformen für verschiedene Geschlechter oder Fälle bei Substantiven zu verwenden sind, für den Anfang . Das ist etwas, was man beim Schreiben der englischen Originaltexte beachten sollte: so telegrafisch wie möglich, damit die Übersetzungen nicht klingen zu gestört.

0 Stimmen

Übrigens, @BalusC, Ihre Antwort ist völlig richtig und das Beste, was wir realistischerweise tun können. Ich schlage lediglich vor, dass durch auch Durch die Bearbeitung der englischen Formulierung kann die Anwendung in ihren lokalisierten Varianten einen etwas professionelleren Eindruck machen.

0voto

supercat Punkte 72939

Ich denke, man wird wahrscheinlich seine Formatzeichenfolge so definieren müssen, dass sie ein "1-von-N"-Feature enthält, vorzugsweise so definiert, dass häufige Fälle (z. B. Plural) einfach sind. Definieren Sie zum Beispiel {0#string1/string2/string3}, um string1 auszugeben, wenn der Parameter 0 null oder weniger ist, string2, wenn er genau 1 ist, und string3, wenn er größer als 1 ist}. Dann könnte man sagen: "Sie haben {0} {0#Messer/Messer/Messer} in der Schublade."

0 Stimmen

Zumindest für die westeuropäischen Sprachen glaube ich nicht, dass Dualis erforderlich ist... (kommt zwischen Singular und Plural, für zwei Objekte!).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X