Android studio - получить перевод элемента массива-строки в string.xml
У меня есть приложение, которое дает пользователю право выбрать элемент из массива в string.xml:
<array-string name="countries">
<item>USA</item>
<item>UK</item>
</array-string>
и другой массив в переведенном на китайский string.xml:
<array-string name="countries">
<item>美国</item>
<item>联合王国</item>
</array-string>
Например, приложение имеет два TextViews
Я хочу, чтобы пользователь выбрал определенную страну на китайском, первым TextView
показывает значение на китайском языке, а второе показывает его значение на английском языке (по умолчанию string.xml).
Я надеюсь, что мое намерение ясно.
2 ответа
Если у вас есть разные папки res для разных локалей, вы можете сделать что-то вроде этого:
Configuration conf = getResources().getConfiguration();
conf.locale = new Locale("pl");
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(getAssets(), metrics, conf);
String str = resources.getString(id);
Если ваш мин SDK> 17 попробуйте это
@NonNull Resources getLocalizedResources(Context context, Locale desiredLocale) {
Configuration conf = context.getResources().getConfiguration();
conf = new Configuration(conf);
conf.setLocale(desiredLocale);
Context localizedContext = context.createConfigurationContext(conf);
return localizedContext.getResources();
}
Переведенные версии strings.xml
не используются для этой цели.
Они используются для предоставления строковых ресурсов на языке локали.
Поскольку в одной и той же языковой версии приложения вам нужны и китайские, и английские значения, вы должны поместить строковые массивы в одно и то же значение по умолчанию. strings.xml
и дать им правильные идентификаторы, такие как countries_chinese
а также countries_english
,
Затем загрузите их в 2 отдельных массива с собственными именами и используйте соответствующие значения каждого.