使用variables访问R.string的内容以表示资源名称

我有一些字符串需要翻译和显示。 这些字符串是variables。 我在strings.xml文件中有翻译。

我想显示字符串的“翻译版本”。 例如,在Activity中:

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

在字符串文件中,我有定义

 French word for Water 

如果我使用这样的东西:

 nameDisplay.setText(R.string.KnownName); 

它会奏效。 但在我的情况下,名称存储在一个variables中,所以我不知道该怎么做才能使setText方法正常运行。

我目前的解决方法是

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

……但这不能很好地扩展。

有什么建议么?

我应该将翻译版本存储在variables中吗?

  • 是否可以在静态上下文块中获取资源?
  • Android:如何组织项目资源?
  • 访问Android中的资源文件
  • 在Android应用中放置包含数据的XML文件的位置
  • android untrue resource not found例外
  • Java:访问资源和Demeter法则
  • Android - getIdentifier总是返回0(库+应用程序)
  • 尝试在NotepadV1示例中加载资源时“资源未find”exception
  • 您可以使用该方法将字符串转换为int标识符:

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

    将活动作为上下文参数(或任何其他Context实例)传递。 然后您可以像往常一样使用getString()方法使用标识符。

    请注意,从字符串到标识符的转换使用reflection,因此可能不那么快,因此请谨慎使用。

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

    您可以做的另一件事是将字符串映射到资源。 这样,您可以将字符串放在variables中(或以编程方式构建它),然后使用映射来查找资源ID。

    strings.xml中

     water agua  ᠤᠰᠥ 

     public class MainActivity extends AppCompatActivity { private Map stringForResourceIdMap = createMap(); private Map createMap() { Map 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); } // ... } 

    注意

    如果您使用不同的翻译本地化您的应用程序 ,那么您应该使用不同的资源文件夹。