uso texto studio strings recurso getresources español como clase array android resources

android - texto - Accediendo a los contenidos de R.string usando una variable para representar el nombre del recurso



strings.xml español (3)

Otra cosa que puedes hacer es asignar la cadena al recurso. De esa manera, puede tener la cadena en una variable (o compilarla programáticamente) y luego usar el mapa para buscar el ID de recurso.

Ejemplo

strings.xml

<string name="water_english">water</string> <string name="water_spanish">agua</string> <string name="water_chinese">水</string> <string name="water_mongolian">ᠤᠰᠥ</string>

Código

public class MainActivity extends AppCompatActivity { private Map<String, Integer> stringForResourceIdMap = createMap(); private Map<String, Integer> createMap() { Map<String, Integer> result = new HashMap<>(); result.put("water_english", R.string.water_english); result.put("water_spanish", R.string.water_spanish); result.put("water_chinese", R.string.water_chinese); result.put("water_mongolian", R.string.water_mongolian); return result; } private String getMyStringResource(String lookupString) { int resourceId = stringForResourceIdMap.get(lookupString); // R.string.xxx return getString(resourceId); } // ... }

Nota

Si está localizando su aplicación con diferentes traducciones, entonces debería usar diferentes carpetas de recursos.

Tengo algunas cadenas que necesito traducir y mostrar. Esas cadenas están en variables. Tengo la traducción en el archivo strings.xml.

Quiero mostrar la "versión traducida" de la cadena. Por ejemplo, dentro de una actividad:

String name = "Water"; TextView nameDisplay = new TextView(this). nameDisplay.setText(name);

En el archivo de cadenas tengo la definición.

<string name="Water">French word for Water</string>

Si usara algo como esto:

nameDisplay.setText(R.string.KnownName);

funcionaria Pero en mi caso, el nombre se almacena en una variable, así que no sé qué hacer para que el método setText funcione correctamente.

Mi solución actual es

String translation = "" if(name == "Water") { translation = getString(R.string.Water); } else { ... } nameDisplay.setText(translation);

... pero esto no escala muy bien.

¿Alguna sugerencia?

¿Debo almacenar la versión traducida en la variable?


Puedes usar el método para convertir una cadena en un identificador int:

public static int getStringIdentifier(Context context, String name) { return context.getResources().getIdentifier(name, "string", context.getPackageName()); }

Pase una actividad como parámetro de contexto (o cualquier otra instancia de contexto). Luego puede usar el identificador como de costumbre con el método getString ().

Tenga en cuenta que la conversión de una cadena a un identificador utiliza la reflexión y, por lo tanto, no puede ser tan rápida, así que utilícelo con cuidado.


private String getStringResourceByName(String aString) { String packageName = context.getPackageName(); int resId = getResources().getIdentifier(aString, "string", packageName); return getString(resId); }