如何使用Xamarin Forms更改iOS设备区域设置?

问题描述 投票:-1回答:1

有人知道如何在不使用设置应用程序的情况下使用Xamarin Forms更改iOS设备区域设置吗?

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

更新

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

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

更新

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

xamarin.forms xamarin.ios
1个回答
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);
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.