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 que i = 0
.
¿Por qué no funciona en mi caso?
en
oru
?Respuestas:
El enlace al que se refiere parece funcionar con cadenas generadas en tiempo de ejecución. Las cadenas de strings.xml no se crean en tiempo de ejecución. Puedes obtenerlos a través de
getResources()
Es un método de laContext
clase. Si está dentro de aActivity
o aService
(que extienden el contexto), puede usarlo como en este fragmento.También tenga en cuenta que el marco de Android puede ocuparse de toda la dependencia del idioma . Simplemente cree carpetas diferentes para cada idioma. Si el inglés es su idioma predeterminado, simplemente ponga las cadenas en inglés
res/values/strings.xml
. Luego cree una nueva carpetavalues-ru
y coloque las cadenas rusas con nombres idénticosres/values-ru/strings.xml
. A partir de este momento, Android selecciona el correcto según la configuración regional del dispositivo, ya sea cuando llamegetString()
o cuando haga referencia a cadenas en XML a través de@string/mystring
. Los queres/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 suministro de recursos para obtener más información.
fuente
android.support.v4.app.Fragment
, puedes llamargetString(R.string.mystring)
directamente.Tengo el mismo problema. Pero este código a continuación funciona para mí: Verifique si su packageName es correcto. Debe consultar el paquete raíz de su aplicación de Android.
fuente
string
y nostrings
. Porque eso es lógico (como el resto de Android). Entonces, gracias por eso (y más), @leonvian. :-)String someStringFromXML = getString(getResources().getIdentifier("some_string_name", "string", getPackageName()));
.No solo de actividades:
fuente
fuente
Agregaría algo a la solución de leonvian, por lo que si por casualidad la cadena no se encuentra entre los recursos (valor de retorno 0, ese no es un código de recurso válido), la función podría devolver algo:
fuente
Mejor enfoque
App.getRes().getString(R.string.some_id)
Funcionará en todas partes (utilidades, modelos también).
He leído todas las respuestas, todas las respuestas pueden hacer tu trabajo.
getString(R.string.some_string_id)
en ambosActivity
oFragment
.Context.getString(R.string.some_string_id)
donde no tiene acceso directo algetString()
método. Al igualDialog
.Problema
Cuando no tienes
Context
acceso , como un método en tuUtil
clase.Asuma el siguiente método sin contexto.
Ahora pasará
Context
como parámetro en este método y usarágetString().
Lo que hago es
¿Qué? ¡Es muy fácil de usar en cualquier lugar de su aplicación!
Así que aquí hay una solución mediante la cual puede acceder a los recursos desde cualquier lugar
Util class
.Agregue un campo de nombre a su
manifest.xml
<application
etiqueta.Ahora estás listo para irte. Usar
App.getAppResources().getString(R.string.some_id)
en cualquier lugar de la aplicación.fuente
getResourses
,getResources
causaría una anulación. Además, el patrón singleton parece innecesario, posiblemente podría omitirse. ¿Alguna pérdida de memoria tiene problemas con esta solución?La forma más fácil es usar la
getString()
función dentro de la actividad.Referencia: http://developer.android.com/guide/topics/resources/string-resource.html
Creo que esta característica se agregó en una versión reciente de Android, cualquiera que conozca el historial puede comentar sobre esto.
fuente
Una forma sencilla de obtener una cadena de recursos de una cadena en un TextView. Aquí resourceName es el nombre del recurso
fuente
Si no tiene una referencia de Actividad, puede usar su contexto de esta manera:
fuente
También hay un conjunto de cadenas de Android predefinidas como "Ok", "Cancelar" y muchas otras, por lo que no tiene que declararlas todas. Están disponibles simplemente por:
(En este caso, cadena "Ok"). Por cierto, también hay otros recursos de Android disponibles como, por ejemplo, imágenes de iconos, etc.
fuente
Cadena myString = getString (R.string.mystring);
camino fácil
fuente
Puedes probar esto en una Actividad:
En otras situaciones como fragmentos, ... use
fuente
Para proteger, debe agregar: mContext.getResources (). GetString (R.string.your_string);
mContext puede ser: contexto en onAttach () de Fragment o this of Activity.
fuente
Si desea obtenerlo dentro de una actividad o fragmnet, entonces:
Si desea obtenerlo de una clase fuera de la actividad o fragmento donde no tiene el contexto de la actividad, use el contexto de la aplicación:
fuente
Use esa línea directamente en su archivo java. Mantenlo simple.
fuente