【发布时间】:2017-11-18 05:14:07
【问题描述】:
假设这是调用堆栈:
Fragment2(当前位置)
片段1
托管活动
用户刚刚导航到 fragment2(即设置屏幕)。他选择了第二种语言,然后导航回 Fragment1。我希望应用程序在他进入 fragment1 后立即显示第二语言的内容。
我了解到,最好的方法是让所有片段派生自一个基本片段,该片段在OnResume() 方法中配置语言环境。
public class BaseFragment : Fragment
{
public override void OnResume()
{
string langCode = prefs.GetString("settings_language", "en_US");
Resources res = Application.Context.Resources;
// Change locale settings in the app.
DisplayMetrics dm = res.DisplayMetrics;
Configuration conf = res.Configuration;
conf.SetLocale(new Locale(langCode.ToLower()));
res.UpdateConfiguration(conf, dm);
OnConfigurationChanged(conf);
base.OnResume();
}
}
我已经尝试过了,但没有任何运气。我没有看到任何变化。 我愿意听取任何建议。
PS。为了确保我没有弄乱值文件夹中 Android 要求的任何命名约定,我尝试使用我想要的语言重新启动模拟器(使用 adb shell)并且它按预期工作。
【问题讨论】:
-
@YorkShen-MSFT 我不完全确定使用
tags会有什么不同。你能进一步解释一下吗?
标签: c# localization xamarin.android