web-dev-qa-db-fra.com

Les paramètres dans strings.xml sont-ils possibles?

Dans mon Android application, je vais implémenter mes chaînes avec une internationalisation. J'ai un problème avec la grammaire et la façon dont les phrases sont construites dans différentes langues.

Par exemple:

"Il y a 5 minutes" - Anglais

"il y a 5 minutes" - allemand

Puis-je faire quelque chose comme ce qui suit dans strings.xml?

<string name="timeFormat">{0} minutes ago</string>

Et puis un peu de magie comme

getString(R.id.timeFormat, dynamicTimeValue)

Ce comportement résoudrait également l'autre problème avec différents ordres Word.

260
dhesse

Oui, formatez simplement vos chaînes de la manière standard String.format().

Voir la méthode Context.getString(int, Object...) et la documentation Android ou JavaFormatter.

Dans votre cas, la définition de chaîne serait:

<string name="timeFormat">%1$d minutes ago</string>
331
Christopher Orr

Si vous avez besoin de deux variables dans le XML, vous pouvez utiliser:

%1$d text... %2$d ou %1$s text... %2$s pour les variables de chaîne.

Exemple:

strings.xml

<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>

activité.Java

String site = "mywebsite";
String days = "11";

//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();
265
Pedro Lobito

Si vous devez formater vos chaînes à l'aide de String.format (String, Object ...), vous pouvez le faire en plaçant vos arguments de format dans la ressource chaîne. Par exemple, avec la ressource suivante:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

Dans cet exemple, la chaîne de format a deux arguments:% 1 $ s est une chaîne et% 2 $ d est un nombre décimal. Vous pouvez formater la chaîne avec les arguments de votre application comme ceci:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

Si vous souhaitez davantage consulter: http://developer.Android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling

20
Gabriel Lucas

Notez que pour cette application particulière, il existe une fonction de bibliothèque standard, Android.text.format.DateUtils.getRelativeTimeSpanString().

12
Divide

Il existe de nombreuses façons de l’utiliser et je vous recommande de consulter cette documentation sur le format de chaîne.

http://developer.Android.com/intl/pt-br/reference/Java/util/Formatter.html

Mais, si vous n'avez besoin que d'une variable, vous devrez utiliser% [type] [type] pourrait être n'importe lequel. Drapeau (voir Types de drapeau dans le site ci-dessus). (c.-à-d. "Mon nom est % s " ou pour définir mon nom en MAJUSCULES, utilisez cette "Mon nom est %" S ")

<string name="welcome_messages">Hello, %1$S! You have %2$d new message(s) and your quote is %3$.2f%%.</string>

Hello, Android! You have 1 new message(s) and your quote is 80,50%.
10
Gorio