如何使用Xamarin Forms更改iOS设备的语言环境?

时间:2019-03-08 13:37:43

标签: xamarin.forms xamarin.ios

没有人知道如何使用Xamarin Forms更改iOS设备的语言环境,而无需使用设置应用程序吗?

如果您投反对票,请添加评论。非常感谢。

更新

我想要的是控制RTL的NavigationPage按钮。

此文档说,NavigationPage按钮位置的限制由设备区域设置控制: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/localization/right-to-left

更新

我的目标是控制NavigationPage,Xamarin的文档指出了更改设备区域设置的方法,我从那里得到了这个想法。如果只是应用程序级别,应该会更好。

1 个答案:

答案 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);
    }
}

为了使从右到左的更改生效,例如希伯来语或阿拉伯语(反之亦然),应用程序需要重新启动。