Изменить язык для приложения Xamarin для Android с помощью ресурсов - PullRequest
0 голосов
/ 05 июля 2019

У меня есть требование поменять язык приложения по выбору переключателей.В приложении уже реализована локализация с использованием ресурсов Android.Ниже я попробовал решения в разных комбинациях из Activity и обычного класса, но пока ничего не получалось:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(lang);  // lang => en-US or nl-BE

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);

var locale = new Java.Util.Locale(lang);
Java.Util.Locale.Default = locale;
Android.Content.Res.Configuration config = new Android.Content.Res.Configuration();
config.Locale = locale;

var context = Application.Context;
context.Resources.Configuration.Locale = locale;
BaseContext.Resources.UpdateConfiguration(config, BaseContext.Resources.DisplayMetrics);
context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);

string title = Application.Context.GetString(Resource.String.title_settings);

Выше «title» никогда не отображается строка на языке, отличном от языка устройства.Есть идеи, чего не хватает?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Я нашел решение после небольшого количества попыток - обнаружил, что я использовал неправильный конструктор Locale, и просто его изменение начало отражать обновленный язык.Ниже приведен рабочий код:

var locale = new Java.Util.Locale(lang, region); // lang => nl; region => BE
Java.Util.Locale.Default = locale;
var context = Application.Context;
context.Resources.Configuration.Locale = locale;

context.Resources.UpdateConfiguration(context.Resources.Configuration, context.Resources.DisplayMetrics);
string title = Application.Context.GetString(Resource.String.title_settings); // Reflects text in updated language
0 голосов
/ 05 июля 2019

Посмотрите документы Xamarin: Локализация Android и особенно раздел " Метод GetText ".

Чтобы получить переведенные строки в коде, используйте метод GetText и передать идентификатор ресурса:

var cancelText = Resources.GetText (Resource.String.taskcancel);
...