J'utilise Plurals pour simplifier mon code. par exemple, j'avais l'habitude d'avoir
<string name="cat">Cat</string>
<string name="cats">Cats</string>
En utilisant Plurals au lieu de plusieurs chaînes, j'ai maintenant
<plurals name="cats">
<item quantity="one">Cat</item>
<item quantity="other">Cats</item>
</plurals>
Cependant, j’avais l'habitude de récupérer des chaînes à utiliser comme titres ou résumés dans mon fichier XML
Android:title="@string/cats"
Ayant supprimé cette chaîne au profit d'un pluriel, je ne sais plus trop comment récupérer ma chaîne à partir de XML. J'ai fait une tentative naïve avec
Android:title="@plurals/cats"
mais cela me donne simplement @1234567890
au lieu de Cats
(ou Cat
).
Quelqu'un sait s'il est possible de récupérer une chaîne d'un pluriel à partir de XML?
Vous devez le définir par code:
...setText(yourContext.getResources().getQuantityString(R.plurals.cats, catsCountVar));
Vous pouvez bénéficier des avantages d'exécution des pluriels et des avantages statiques des ressources de chaîne en laissant vos ressources de chaîne où elles se trouvent et en les référant dans vos ressources plurielles.
From https://developer.Android.com/guide/topics/resources/string-resource.html#Plurals (caractères gras ajoutés).
<item>
Une chaîne plurielle ou singulière. La valeur peut être une référence à une autre ressource de chaîne. Doit être un enfant d'un élément. Attention, vous devez échapper aux apostrophes et aux guillemets. Voir Formatage et style, ci-dessous, pour plus d'informations sur le style et le formatage appropriés de vos chaînes. Exemple:
<string name="cat">Cat</string>
<string name="cats">Cats</string>
<plurals name="cats">
<item quantity="one">@string/cat</item>
<item quantity="other">@string/cats</item>
</plurals>
Maintenant, vous pouvez utiliser Android:title="@string/cats"
dans des fichiers XML et également utiliser
getQuantityString(R.plurals.cats, numberOfCats)
à l'exécution.
Si votre chaîne inclut un formatage avec un nombre, vous devez envoyer la variable entière deux fois, exemple
strings.xml
<resources>
<plurals name="numberOfMinute">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
</plurals>
</resources>
en Java
int min = getNumberOfMinute();
Resources res = getResources();
String formattedStr = res.getQuantityString(R.plurals.numberOfMinute, min, min); //this will return "20 minutes" or "1 minute" depending on cariable
Voici une façon d'utiliser une ressource plurielle en tant qu'attribut de votre vue personnalisée.
src/main/res/xml/layout.xml
<com.mypackage.MyView
app:foo="@plurals/cats"/>
src/main/res/values / attrs.xml
<resources>
<declare-styleable name="MyView">
<attr name="foo"/>
</declare-styleable>
</resources>
MyView.Java
public class MyView extends View {
private int fooResId;
private int quantity;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView);
fooResId = a.getResourceId(R.styleable.MyView_foo, 0);
a.recycle();
}
// this will return "Cat" or "Cats" depending on the value of quantity
private String getFooString() {
return getContext().getResources().getQuantityString(fooResId, quantity);
}
}