Wie verwenden von Android-Menge strings (Plural)?
Ich versuche, mit getQuantityString Methode in Ressourcen abrufen, die Menge von Zeichenfolgen (Plural) basiert auf der android-Entwickler-Richtlinien Menge String (Plural)
Den Fehler bin ich immer
Error:(604) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
Error:(604) Found tag </item> where </plurals> is expected
wenn ich den Plural als unten
<plurals name="productCount">
<item quantity="one" formatted="true">%1$d of %2$d product</item>
<item quantity="other" formatted="true">%1$d of %2$d products</item>
</plurals>
und versucht, es zu Lesen, wie unten
productIndexCountText.setText(getResources().getQuantityString(R.plurals.productCount, position, size));
Eine Problemumgehung ist, zu brechen die Zeichenfolge bis zu plural nur für den letzten Teil der Zeichenfolge und verketten Sie die beiden Teile. Aber ich versuche zu vermeiden, wenn möglich.
für andere, die auf der Suche nach ähnlichen Informationen, hier ist die offizielle Anleitung. developer.android.com/guide/topics/resources/...
InformationsquelleAutor Andy | 2017-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht, stellen Sie die "Format" - Attribut für diese Elemente. Bei der Verwendung Menge von strings, gibt es nur drei Möglichkeiten:
%d
oder welches format Sie auch immer benötigen,%1$d
Als für die
getQuantityString
Methode, es gibt zwei überladungen: einmal nur die ressource-id und die Menge, und eines mit einer zusätzlichenObject... formatArgs
parameter.Für Fall 1., Sie können die
getQuantityString(@PluralsRes int id, int quantity)
Methode.In allen anderen Fällen ich. e. wenn Sie keine Parameter, müssen Sie die
getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
überlastung. Hinweis: alle Parameter im param-array. Das bedeutet, dass, wenn die Ressource-string zeigt die Menge an, die Menge Variablen übergeben werden zweimal der Funktion.So, wenn diese sind Ihre Ressourcen
dann die entsprechenden Aufrufe an
getQuantityString
sind:Was ist, wenn die Menge Schweben wie Entfernung? ich will zeigen, 1 km oder 1,5 km
Sie müssten teilen Sie die übersetzung in mehrere Teile dann. Die beste Praxis ist, um es zu teilen nicht in zwei, sondern in drei Teile:
%d result(s)
,%d chapter(s)
, undFound %1$s in %2$s
. Dies ermöglicht eine hypothetische Sprache so ändern Sie die Reihenfolge der Wörter im Satz, wo es notwendig ist (e. g. wenn in einer Sprache die syntax warIn %d chapter(s), %d result(s) were found.
), das wäre unmöglich, wenn Sie nur split den Satz in zwei Teile und verkettet Sie in den code.Ja, das ist genau das, was ich Tat. Ich fragte, weil ich dachte, vielleicht gibt es einen besseren Weg, es zu tun. Danke.
InformationsquelleAutor LWChris