wake-up-neo.com

Sind Parameter in strings.xml möglich?

In meiner Android App werde ich meine Zeichenfolgen mit Internationalisierung implementieren. Ich habe ein Problem mit der Grammatik und der Art und Weise, wie Sätze in verschiedenen Sprachen erstellt werden.

Zum Beispiel:

"5 minutes ago" - Englisch

"vor 5 Minuten" - Deutsch

Kann ich in der Datei strings.xml Folgendes tun?

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

Und dann etwas wie Magie

getString(R.id.timeFormat, dynamicTimeValue)

Dieses Verhalten würde auch das andere Problem mit anderen Word-Ordnungen lösen.

260
dhesse

Ja, formatieren Sie Ihre Zeichenfolgen einfach auf die Standardart String.format().

Siehe die Methode Context.getString(int, Object...) und die Dokumentation Android oder JavaFormatter.

In Ihrem Fall wäre die String-Definition:

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

Wenn Sie im XML zwei Variablen benötigen, können Sie Folgendes verwenden:

%1$d text... %2$d oder %1$s text... %2$s für Stringvariablen.

Beispiel:

strings.xml

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

aktivität.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

Wenn Sie Ihre Zeichenfolgen mit String.format (String, Object ...) formatieren müssen, können Sie dies tun, indem Sie Ihre Formatargumente in die Zeichenfolgenressource einfügen. Zum Beispiel mit der folgenden Ressource:

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

In diesem Beispiel hat die Formatzeichenfolge zwei Argumente:% 1 $ s ist eine Zeichenfolge und% 2 $ d ist eine Dezimalzahl. Sie können die Zeichenfolge folgendermaßen mit Argumenten aus Ihrer Anwendung formatieren:

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

Weitere Informationen finden Sie unter: http://developer.Android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling

20
Gabriel Lucas

Beachten Sie, dass es für diese bestimmte Anwendung eine Standardbibliotheksfunktion gibt, Android.text.format.DateUtils.getRelativeTimeSpanString().

12
Divide

Es gibt viele Möglichkeiten, es zu verwenden, und ich empfehle Ihnen, diese Dokumentation zum Zeichenfolgenformat zu lesen.

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

Wenn Sie jedoch nur eine Variable benötigen, müssen Sie% [type] verwenden, wobei [type] ein beliebiges Flag sein kann (siehe Flag-Typen im Inneren) Seite oben). (zB "Mein Name ist % s " oder um meinen Namen in GROSSBUCHSTABEN zu setzen: "Mein Name ist % 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