没有人知道如何使用Xamarin Forms更改iOS设备的语言环境,而无需使用设置应用程序吗?
如果您投反对票,请添加评论。非常感谢。
更新
我想要的是控制RTL的NavigationPage按钮。
此文档说,NavigationPage按钮位置的限制由设备区域设置控制: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/localization/right-to-left
更新
我的目标是控制NavigationPage,Xamarin的文档指出了更改设备区域设置的方法,我从那里得到了这个想法。如果只是应用程序级别,应该会更好。
答案 0 :(得分:2)
对于Xamarin Forms,我建议进行依赖服务。制作这样的界面:
public interface ILanguageSwitcher
{
void ChangeAppLocale(string locale);
}
为iOS创建界面的实现:
[assembly: Dependency(typeof(LanguageSwitcher))]
namespace MyApp.iOS
{
class LanguageSwitcher : ILanguageSwitcher
{
public void ChangeAppLocale(string locale)
{
var iOSLocale = locale.Replace('-', '_');
NSUserDefaults.StandardUserDefaults.SetValueForKey(NSArray.FromStrings(iOSLocale), new NSString("AppleLanguages"));
NSUserDefaults.StandardUserDefaults.Synchronize();
}
}
}
请注意,在iOS中,美国英语的语言环境为“ en_US”,而不是“ en-US”。
从您的Xamarin Forms代码中调用此依赖项:
ILanguageSwitcher _languageSwitcher = DependencyService.Get<ILanguageSwitcher>();
private void LanguagePicker_SelectedIndexChanged(object sender, System.EventArgs e)
{
var newItem = LanguagePicker.SelectedItem as CultureInfo;
if (_languageSwitcher != null)
{
_languageSwitcher.ChangeAppLocale(newItem.Name);
}
}
为了使从右到左的更改生效,例如希伯来语或阿拉伯语(反之亦然),应用程序需要重新启动。