Android: ¿Cómo obtengo cadenas de recursos usando su nombre?
Me gustaría tener 2 idiomas para la interfaz de usuario y valores de cadena separados para ellos en mi archivo de recursos 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>
Ahora necesito recuperar estos valores dinámicamente en mi aplicación:
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);
Mi problema es ese i = 0
.
¿Por qué no funciona en mi caso?
El enlace al que te refieres parece funcionar con cadenas generadas en tiempo de ejecución. Las cadenas de strings.xml no se crean en tiempo de ejecución. Puedes conseguirlos a través de
String mystring = getResources().getString(R.string.mystring);
getResources()
es un método de la Context
clase. Si está dentro de a Activity
o a Service
(que extienden el contexto), puede usarlo como en este fragmento.
También tenga en cuenta que el marco de trabajo de Android puede encargarse de toda la dependencia del idioma . Simplemente cree carpetas diferentes para cada idioma. Si el inglés es su idioma predeterminado, simplemente coloque las cadenas en inglés en res/values/strings.xml
. Luego cree una nueva carpeta values-ru
y coloque las cadenas rusas con nombres idénticos en res/values-ru/strings.xml
. A partir de este momento, Android selecciona el correcto según la configuración regional del dispositivo para usted, ya sea cuando llama getString()
o cuando hace referencia a cadenas en XML a través de @string/mystring
. Los de res/values/strings.xml
son los de respaldo; si no tiene una carpeta que cubra la configuración regional de los usuarios, esta se usará como valores predeterminados.
Consulte Localización y provisión de recursos para obtener más información.
Verifique si su nombre de paquete es correcto. Debe consultar el paquete raíz de su aplicación de Android.
private String getStringResourceByName(String aString) {
String packageName = getPackageName();
int resId = getResources().getIdentifier(aString, "string", packageName);
return getString(resId);
}