views:

35

answers:

1

Hello, I have a few strings which I need to translate and display. Those strings are in variables. I have the translation in the strings.xml file.

I want to display the "translated version" of the string. For example, inside an Activity:

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

In the strings file I have the definition

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

If I used something like this:

nameDisplay.setText(R.string.KnownName);

it would work. But in my case, the name is stored in a variable so I do not know what to do in order for the setText method to function properly.

My current workaround is

String translation = ""

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

nameDisplay.setText(translation);

... but this does not scale very well.

Any suggestions?

Should I store the translated version in the variable?

Thanks.

A: 

You can use the method to convert string into int identifier:

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

Pass in an activity as context parameter (or any other Context instance). Then you can use the identifier as usual with getString() method.

Note that conversion from string to identifier uses reflection and thus can be not that fast, so use carefully.

Konstantin Burov
Hello. Thanks for your comment. It works. Also thanks for warning about the possible loss of performance.
MyNameIsZero