2015-12-21 21 views
11

Nelle stringhe Android, è possibile definire plurali per gestire le traduzioni in base al numero effettivo fornito alla stringa come descritto here. Le stringhe consentono inoltre di specificare più parametri posizionali simili a ciò che sprintf fa in molte lingue.Stringhe plurali Android con più parametri

Tuttavia, si consideri la seguente stringa:

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

Esso contiene due numeri, come potrei trasformare questo ad un plurale in Android? Tutti gli esempi funzionano sempre con un solo parametro. È possibile?

risposta

3

getQuantityString ha una versione sovraccaricata che accetta un ID stringa, la quantità e un di oggetto che è possibile utilizzare per formattare la stringa. Anche se sembra possibile usare il plurale, mi sembra strano per il tempo. È possibile utilizzare i metodi di supporto contenuti in DateUtil, che sono già localizzati e si occupano di singular/plural e quindi completare la stringa con i risultati di questi metodi di supporto. Per esempio. 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> 

e quindi è possibile utilizzare getQuantityString per recuperare i due pezzi e si combinano in uno.

+2

getRelativeTimeSpanString sembra essere una buona scelta per il mio problema, ma non risolverebbe la mia domanda iniziale. Avere un testo con più numeri non è così raro ("Hai 5 mail e 3 messaggi", "Ci sono 5 Dollari e 83 centesimi rimasti."). Non vedo come specificare l'XML per la versione getQuantityString che suggerisci. –

+0

guarda il primo link, ho postato. Le documentazioni dicono che la quantità verrà utilizzata per scegliere la stringa e il terzo argomento per formattarla. – Blackbelt

+1

Scusa, non capisco.Puoi espandere la tua risposta con un esempio di a) XML per impostare una stringa per le 4 forme plurali necessarie per "Hai 5 mail e 3 messaggi" eb) la chiamata a getQuantityString con mail e messaggi come quantità di input? –

-6

Bene, ecco un modo che potrebbe funzionare. Creare un tag plurali sotto i valori/strings.xml come questo:

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

Poi nell'attività:

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

Spero che aiuta !!!

+2

Essa non risponde alla domanda .. – user2878850

+4

La soluzione suggerita non funzionerebbe affatto. Solo uno dei testi sarà selezionato per ogni chiamata a getQuantityString (...). –

5

La risposta precedente utilizza la concatenazione di stringhe non corretta da un punto di vista i18n. Per la stringa originale "% 1 $ d ore e% 2 $ d minuti rimanenti." l'uso della concatenazione di stringhe forzerebbe la traduzione di "rimanenti" alla fine che potrebbe non essere appropriata per alcune lingue.

mia soluzione sarebbe:

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

O magari con "Tempo residuo", come il titolo.

Questa soluzione è menzionato in http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

E 'spesso possibile evitare le stringhe di quantità utilizzando formulazioni di quantità-neutro come "Libri: 1"