使用资源更改 Xamarin Android 应用程序的语言

Change Language for Xamarin Android App using Resources

我需要在选择单选按钮时更改应用程序的语言。应用已使用 Android 资源实现了本地化。我尝试了 Activity 和正常 class 的不同组合的以下解决方案,但到目前为止没有任何效果:

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);

Above 'title' 从不以设备语言以外的语言显示字符串。知道可能缺少什么吗?

提前致谢。

查看 Xamarin 文档:Android Localization and especially the section "GetText Method”。

To retrieve translated strings in code, use the GetText method and pass the resource ID:

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

经过一些尝试和尝试,我找到了解决方案 - 发现我使用了错误的 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