String sous Android

 

Definir une ressource string

Définir un String dans le fichier strings.xml:

<string name="maChaine">Ma chjaine de caractères à moi, c\'est la meilleure</string-array>

Image non trouvée !Certains caractères ne peuvent pas être saisis directement comme par exemple ' qui peut indiquer l'ouverture d'une chaîne. Dans ce cas, ces caractères doivent être précédés de \ (Classique dans le monde Unix et la plupart des langages de programmation).

 

Pour utiliser cette ressource, vous ferez dans votre code:

String texte= getResources().getString(R.string.maChaine);

Image non trouvée !Certaines méthodes peuvent travailler directement avec l'identifiant de la ressource. Il ne sera alors pas nécessaire de convertir la ressource en String.

Par exemple TextView.setText (id); -> textView.setText (R.string.maChaine);

 

Gérer le pluriel d'une ressource string

Il est possible de gérer "automatiquement" le pluriel d'un string

<plurals name="objetTable">

<item quantity="one">1 table</item>
<item quantity="other">%d tables</item>

</plurals>

Pour utiliser le pluriel du mot table, vous récupérez toujours la ressource de la même manière que précédemment soit:

Resources resources = getResources();

Mais pour récupérer le mot au singulier ou au pluriel suivant la quantité que votre programme aura évidemment déterminé avant:

String strTable = resources.getQuantityString(R.plurals.objeteTable, quantité, valeur_paramètre_string);

Avec quantité qui permettra à Android de déterminer s'il faut utiliser le singulier ou le pluriel du mot

valeur_paramètre_string qui est le paramètre qui sera passé à la chaîne other à la place de %d

Image non trouvée !Cette commande a tout de même ses limites pour nous français. En effet, 0 se mettra au pluriel en Anglais, pas en français ! et il n'existe pas de <item quantity="zero">0 table</item>...

Vous devrez donc toujours utiliser une solution comme par exemple celle-ci:

String strMot=(objet.getValeur()>1 ? res.getString(R.string.mot_pluriel):res.getString(R.string.mot_singulier));