2012-04-12 8 views
5

Ist es möglich, einen String in strings.xmlAndroid Referenz-Zeichenkette in string.xml

Eg zu verweisen:

<string name="application_name">@string/first_name Browser</string> 
<string name="first_name">Chrome</string> 

Wo je nach Anforderung, i den Wert von first_name umschalten auf "Chrome" , "Firefox" oder "Opera".

+0

möglich Duplikat mehr über die Lokalisierung lesen [Kann man android Ressourcen-Strings in neue Saiten kombinieren?] (Http://stackoverflow.com/questions/3613722/can-one-combine-android -resource-strings-in-new-strings) –

+0

möglich Duplikat von [Eine Zeichenfolge aus einer anderen Zeichenfolge in strings.xml referenzieren?] (http://stackoverflow.com/questions/4746058/reference-one-string-from-another -string-in-strings-xml) – sschuberth

Antwort

16

Sie die Referenz der String-Ressource geben können, aber Einschränkung sind als

<string name="first_name">Chrome</string> 
<string name="application_name">@string/first_name</string> // gives "Chrome" 
<string name="application_name">Chrome @string/first_name</string> // gives "Chrome @string/first_name" 
<string name="application_name">@string/first_name Chrome </string> // gives error 

folgt Wenn der Inhalt beginnt mit „@“, dann Android hält dies für eine referenzierte Zeichenkette, letzten Fall sieht den wegen Android einen Fehler gibt tools nehmen @ und die nächste Zeichenkette als Referenznamen der Zeichenkette und versuchen, eine Ressource namens "@ string/first_name Chrome" zu finden, die nicht existiert.

können Sie String-Format verwenden dynamisch wie Unterketten <string name="application_name">%1$s browser</string>

zuweisen

String text = String.format(res.getString(R.string.application_name), "Chrome"); 
+0

Kann den String formatieren mit - 'res.getString (R.string.application_name," Chrome ")' –

2

Die Strings in der strings.xml zu verwenden sind festgelegt und nicht zur Laufzeit verändert werden kann. Sie müssen für jeden Fall eine Zeichenfolge definieren und den Code wechseln.

String name; 

if (/* browser is Chrome*/) { 
    name = getString(R.string.first_name_chrome); 
} else if (/* browser is Firefox */) { 
    name = getString(R.string.first_name_firefox); 
} 

Sie können jedoch die Anwendung veranlassen, die richtige Zeichenfolge für verschiedene Sprachen automatisch auszuwählen. Dies kann durch Platzieren von Zeichenkettendateien in lokalisierten Ordnern (values-en, values-fr, values-pl usw.) erfolgen.

Sie können http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

+0

Ist es ein Fehler oder ist es richtig für Ihre Verwendung, dass Sie "R. Zeichenketten "anstelle von" R.string "? – RenniePet

Verwandte Themen