Android: ¿Cómo obtengo cadenas de recursos usando su nombre?

Resuelto Ivan asked hace 54 años • 16 respuestas

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?

Ivan avatar Jan 01 '70 08:01 Ivan
Aceptado

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 Contextclase. Si está dentro de a Activityo 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-ruy 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.xmlson 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.

 avatar Sep 21 '2011 00:09

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);
    }
leonvian avatar Jul 21 '2012 20:07 leonvian