2015-12-21 6 views
11

In Android-Strings können Sie Pluralformen definieren, um Übersetzungen zu behandeln, die von der tatsächlichen Zahl abhängen, die der Zeichenfolge wie beschrieben here beschrieben wird. Die Zeichenfolgen ermöglichen auch die Angabe mehrerer Positionsparameter, ähnlich wie in vielen Sprachen sprintf.Android Plural Strings mit mehreren Parametern

Allerdings betrachten die folgende Zeichenfolge:

<resources> 
    <string name="remaining">%1$d hours and %2$d minutes remaining.</string> 
</resources> 

Es enthält zwei Zahlen, wie würde ich dies in Android zu einer pluralen verwandeln? Alle Beispiele arbeiten immer nur mit einem einzelnen Parameter. Ist das überhaupt möglich?

Antwort

3

getQuantityString hat eine überladene Version, die eine String-ID, die Menge und varargs des Objekts, das Sie zum Formatieren der Zeichenfolge verwenden konnte. Obwohl es möglich erscheint, Plural zu verwenden, klingt es für mich seltsam für die Zeit. Sie könnten die in DateUtil enthaltenen Hilfsmethoden verwenden, die bereits lokalisiert sind und sich um Singular/Plural kümmern und dann Ihre Zeichenfolge mit den Ergebnissen dieser Hilfsmethoden vervollständigen. Z.B. getRelativeTimeSpanString

<plurals name="numberOfEmails"> 
    <item quantity="one">%d email</item> 
    <item quantity="other">%d emails</item> 
</plurals> 

<plurals name="numberOfMessages"> 
    <item quantity="one">%d message</item> 
    <item quantity="other">%d messages</item> 
</plurals> 

und dann können Sie getQuantityString verwenden Sie die beiden Stücke abrufen und in einem kombinieren.

+2

getRelativeTimeSpanString scheint eine gute Wahl für mein Problem zu sein, würde aber meine erste Frage nicht lösen. Einen Text mit mehreren Zahlen zu haben ist nicht so selten ("Du hast 5 Mails und 3 Nachrichten", "Es sind noch 5 Dollar und 83 Cents übrig."). Ich sehe nicht, wie ich das XML für die von Ihnen vorgeschlagene getQuantityString-Version angeben würde. –

+0

schau dir den ersten Link an, den ich gepostet habe. Die Dokumentation sagt, dass Menge verwendet wird, um die Zeichenfolge und das dritte Argument zu wählen, um es zu formatieren – Blackbelt

+1

Sorry, ich verstehe es nicht.Können Sie Ihre Antwort um ein Beispiel erweitern: a) das XML, um eine Zeichenkette für die vier Pluralformen für "Sie haben 5 Mails und 3 Nachrichten" zu erstellen und b) den Aufruf von getQuantityString mit Mails und Nachrichten als Eingangsgrößen? –

-6

Nun, hier ist ein Weg, der funktionieren könnte. Erstellen Sie ein Plurale Tag unter Werte/strings.xml wie folgt aus:

<resources> 
    <plurals name="remaining"> 
     <item quantity="one">%1$d hours and</item> 
     <item quantity="other">%2$d minutes remaining.</item> 
    </plurals> 
</resources> 

Dann in der Aktivität:

Resources res = getResources(); 
String myString = res.getQuantityString(R.plurals.remaining, count, count); 

Ich hoffe, es hilft !!!

+2

Es ist nicht die Frage beantworten .. – user2878850

+4

Die vorgeschlagene Lösung würde überhaupt nicht funktionieren. Nur einer der Texte wird für jeden Aufruf von getQuantityString (...) ausgewählt. –

5

Vorherige Antwort verwendet String-Verkettung, die aus einer i18n Sicht falsch ist. Für die ursprüngliche Zeichenfolge "% 1 $ d Stunden und% 2 $ d Minuten übrig." die Verwendung von String-Verkettung würde die Übersetzung von "restend" zum Ende zwingen, was für einige Sprachen nicht geeignet ist.

Meine Lösung wäre:

<resources> 
    <string name="remaining">Time remaining: Hours:%1$d Minutes:%2$d.</string> 
</resources> 

Oder vielleicht mit als Überschrift "Restzeit".

Diese Lösung wird in http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling erwähnt

Es ist oft möglich Menge Saiten zu vermeiden, indem Menge neutrale Formulierungen wie „Bücher: 1“ mit