Android studio - получить перевод элемента массива-строки в string.xml - PullRequest
0 голосов
/ 28 августа 2018

У меня есть приложение, которое дает пользователю право выбирать элемент из массива в 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 ]

0 голосов
/ 28 августа 2018

Переведенные версии strings.xml для этой цели не используются.
Они используются для предоставления строковых ресурсов на языке локали.
Поскольку в одной и той же языковой версии приложения вам нужны и китайские, и английские значения, вы должны поместить оба строковых массива в одно и то же значение по умолчанию strings.xml и присвоить им правильные идентификаторы, такие как countries_chinese и countries_english.
Затем загрузите их в 2 отдельных массива с собственными именами и используйте соответствующие значения каждого.

0 голосов
/ 28 августа 2018

Если у вас есть разные папки 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);

Если ваш min 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();
}
...