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 отдельных массива с собственными именами и используйте соответствующие значения каждого.

Другие вопросы по тегам