Xamarin Android更改语言文件夹上的按钮点击



我正在Xamarin.Android中开发一个应用程序,它必须支持英语和保加利亚语。大部分文本存储在values文件夹中的Strings.xml中。英文文本位于默认的values文件夹中,保加利亚文文本位于values-bg文件夹中。两者的文件名都是String.xml,并且每个字符串的名称与其翻译版本相同。现在,我该如何做到当我单击一个按钮时,它会从values-bg中读取字符串,而当我单击另一个时,它又会从默认值中读取字符串?此外,我希望应用程序中的每一项活动都是这样。

我一直在测试如何以编程方式更改区域设置,终于找到了一个适合我的解决方案

正如您所说,您需要一个values文件夹,其中包含具有默认值的strings.xml(默认值为英语),然后是一个values-bg文件夹,具有相同的文件,但具有保加利亚语翻译的值。字符串有相同的名称是很重要的,所以你做对了。

然后,在您的点击事件中,您可以添加以下内容:

var locale = new Java.Util.Locale ("bg");
Android.Content.Res.Configuration conf = Resources.Configuration;
conf.Locale = locale;
DisplayMetrics dm = Resources.DisplayMetrics;
Resources.UpdateConfiguration (conf, dm);
Recreate ();

首先,该代码将为"bg"区域设置声明一个Locale变量。然后,它获取设备的实际配置,并对其应用新的Locale。使用UpdateConfiguration保存更改。重新创建是可选的,正如其名称所解释的那样,它只是用区域设置"bg"而不是应用的任何默认区域设置来重新创建当前活动,该活动将使用新配置加载。它现在将在values bg文件夹中获取字符串。

注意:我在接受答案的评论中读到,在一些设备上,在应用程序中一段时间后,配置将重置为默认值。我不知道为什么会发生这种情况,但您可能需要在加载新活动时检查区域设置是否发生了某种更改,以防止回滚。

最新更新