You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI 8.0.70中CultureInfo.InstalledUICulture在iOS17.6崩溃?

iOS 17.6下CultureInfo.InstalledUICulture崩溃问题及替代方案

一、iOS 17.6相关变更说明

iOS 17.6对系统文化信息的底层访问逻辑做了调整,导致.NET MAUI 8.0.70版本中调用CultureInfo.InstalledUICulture时出现崩溃。该API在iOS 17.6及后续版本的托管代码环境中已无法正常工作,属于平台兼容性问题。

二、替代方案

1. 获取设备当前区域/文化设置

通过iOS原生API直接获取系统区域信息,再转换为.NET的CultureInfo对象,避免调用问题API。可通过条件编译实现跨平台兼容:

#if IOS
using Foundation;
#endif

public CultureInfo GetDeviceCurrentCulture()
{
#if IOS
    // 调用iOS原生Locale API获取区域标识
    var localeIdentifier = NSLocale.CurrentLocale.LocaleIdentifier;
    return new CultureInfo(localeIdentifier);
#else
    // 其他平台继续使用原API
    return CultureInfo.InstalledUICulture;
#endif
}

2. 应用内区域切换实现

维护全局文化信息实例,替代系统默认的InstalledUICulture作为应用本地化的数据源:

public partial class App : Application
{
    // 全局当前文化信息
    public static CultureInfo CurrentCulture { get; set; }

    public App()
    {
        InitializeComponent();
        // 初始化时加载设备当前文化
        CurrentCulture = GetDeviceCurrentCulture();
        // 设置线程默认文化
        SetThreadCulture(CurrentCulture);
        MainPage = new MainPage();
    }

    // 设置线程文化的辅助方法
    private void SetThreadCulture(CultureInfo culture)
    {
        CultureInfo.DefaultThreadCurrentCulture = culture;
        CultureInfo.DefaultThreadCurrentUICulture = culture;
    }

    // 提供外部调用的切换方法
    public static void SwitchCulture(CultureInfo newCulture)
    {
        CurrentCulture = newCulture;
        var app = Current as App;
        app?.SetThreadCulture(newCulture);
        // 刷新界面(示例:重置MainPage触发页面重建)
        Current.MainPage = new MainPage();
    }
}

使用时,所有依赖本地化的逻辑直接引用App.CurrentCulture即可,切换时调用App.SwitchCulture()方法即可完成全局文化更新。

内容的提问来源于stack exchange,提问作者OXO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:34