Je voudrais avoir 2 langues pour l'interface utilisateur et des valeurs de chaîne distinctes pour elles dans mon fichier de ressources res\values\strings.xml
:
<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>
<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>
Maintenant, je dois récupérer ces valeurs dynamiquement dans mon application:
spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);
Mon problème est que i = 0
.
Pourquoi ça ne marche pas dans mon cas?
en
ouru
?Réponses:
Le lien auquel vous faites référence semble fonctionner avec des chaînes générées lors de l'exécution. Les chaînes de strings.xml ne sont pas créées au moment de l'exécution. Vous pouvez les obtenir via
getResources()
est une méthode de laContext
classe. Si vous êtes dans unActivity
ou unService
(qui étendent le contexte), vous pouvez l'utiliser comme dans cet extrait.Notez également que toute la dépendance linguistique peut être prise en charge par le cadre Android . Créez simplement des dossiers différents pour chaque langue. Si l'anglais est votre langue par défaut, insérez simplement les chaînes anglaises
res/values/strings.xml
. Créez ensuite un nouveau dossiervalues-ru
et placez les chaînes russes avec des noms identiques dansres/values-ru/strings.xml
. À partir de ce moment, Android sélectionne le bon en fonction des paramètres régionaux de l'appareil pour vous, soit lorsque vous appelez, soit lorsque vousgetString()
référencez des chaînes en XML via@string/mystring
. Ceux deres/values/strings.xml
sont ceux de secours, si vous n'avez pas de dossier couvrant les paramètres régionaux des utilisateurs, celui-ci sera utilisé comme valeurs par défaut.Voir Localisation et fourniture de ressources pour plus d'informations.
la source
android.support.v4.app.Fragment
, vous pouvez simplement appelergetString(R.string.mystring)
directement.J'ai le même problème. Mais ce code ci-dessous fonctionne pour moi: Vérifiez si votre packageName est correct. Vous devez vous référer au package racine de votre application Android.
la source
string
ou nonstrings
. Parce que c'est logique (comme le reste d'Android). Donc, merci pour cela (et plus), @leonvian. :-)String someStringFromXML = getString(getResources().getIdentifier("some_string_name", "string", getPackageName()));
:.Pas seulement des activités:
la source
la source
J'ajouterais quelque chose à la solution de leonvian, donc si par hasard la chaîne n'est pas trouvée parmi les ressources (valeur de retour 0, ce n'est pas un code de ressource valide), la fonction peut retourner quelque chose:
la source
Meilleure approche
App.getRes().getString(R.string.some_id)
Fonctionnera partout (Utils, Models aussi).
J'ai lu toutes les réponses, toutes les réponses peuvent faire votre travail.
getString(R.string.some_string_id)
à la foisActivity
ouFragment
.Context.getString(R.string.some_string_id)
là où vous n'avez pas d'accès direct à lagetString()
méthode. CommeDialog
.Problème
Lorsque vous n'y avez pas
Context
accès , comme une méthode dans votreUtil
classe.Supposons la méthode ci-dessous sans contexte.
Vous allez maintenant passer
Context
comme paramètre dans cette méthode et utilisergetString().
Ce que je fais c'est
Quelle? Il est très simple à utiliser n'importe où dans votre application!
Voici donc une solution par laquelle vous pouvez accéder aux ressources de n'importe où comme
Util class
.Ajoutez un champ de nom à votre
manifest.xml
<application
balise.Vous êtes maintenant prêt à partir. Utilisez
App.getAppResources().getString(R.string.some_id)
n'importe où dans l'application.la source
getResourses
,getResources
cela entraînerait un remplacement. Le motif singleton semble également inutile, peut-être pourrait être ignoré. Des problèmes de fuite de mémoire avec cette solution?Le moyen le plus simple consiste à utiliser la
getString()
fonction dans l'activité.Référence: http://developer.android.com/guide/topics/resources/string-resource.html
Je pense que cette fonctionnalité est ajoutée dans une version récente d'Android, toute personne connaissant l'historique peut commenter cela.
la source
Un moyen simple d'obtenir une chaîne de ressource d'une chaîne dans une TextView. Ici resourceName est le nom de la ressource
la source
Si vous n'avez pas de référence d'activité, vous pouvez utiliser votre contexte de cette manière:
la source
Il existe également un ensemble de chaînes Android prédéfinies telles que "Ok", "Annuler" et bien d'autres - vous n'avez donc pas à tout déclarer. Ils sont disponibles simplement par:
(Dans ce cas, chaîne "Ok"). BTW, il existe également d'autres ressources Android comme par exemple des images d'icônes, etc.
la source
String myString = getString (R.string.mystring);
moyen facile
la source
Vous pouvez essayer ceci dans une activité:
Dans d'autres situations comme des fragments, ... utilisez
la source
Pour être sûr, vous devez ajouter: mContext.getResources (). GetString (R.string.your_string);
mContext peut être: contexte dans onAttach () de Fragment ou this of Activity.
la source
Si vous ne le souhaitez pas dans une activité ou un réseau de fragmentation, alors:
Si vous souhaitez l'obtenir à partir d'une classe en dehors de l'activité ou d'un fragment où vous n'avez pas le contexte d'activité, utilisez le contexte d'application:
la source
Utilisez cette ligne directement dans votre fichier java. Rester simple.
la source