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

Xamarin Forms获取iOS设备系统语言失效,Android正常

Xamarin Forms iOS 获取系统语言异常的解决方案

问题原因

CultureInfo.CurrentUICulture.TwoLetterISOLanguageName 在iOS上的行为依赖于应用自身的本地化配置,而非系统全局语言设置。如果你的iOS项目没有添加法语(fr)的本地化支持,应用会默认回退到英文,导致返回en。而Android平台的CultureInfo会直接读取系统语言设置,所以表现正常。

解决步骤

1. 启用iOS项目的法语本地化支持

  • 打开Xamarin iOS项目的属性面板,切换到「iOS应用程序」标签页。
  • 在「本地化」区域,勾选「法语 (fr)」。
  • 保存设置后,项目会自动生成对应的本地化资源文件,确保应用能识别法语环境。

2. 使用iOS原生API获取系统语言(推荐)

通过依赖服务调用iOS原生的NSLocale API,直接读取系统首选语言,不受应用本地化配置限制:

共享项目定义接口

public interface ILanguageService
{
    string GetSystemLanguage();
}

iOS项目实现服务

[assembly: Dependency(typeof(LanguageService))]
namespace YourAppNamespace.iOS
{
    public class LanguageService : ILanguageService
    {
        public string GetSystemLanguage()
        {
            // 获取系统首选语言列表的第一项,格式通常为fr-FR、en-US
            var preferredLang = NSLocale.PreferredLanguages[0];
            // 提取两位语言代码
            return preferredLang.Split('-')[0];
        }
    }
}

共享项目调用服务

var languageService = DependencyService.Get<ILanguageService>();
string phoneLanguage = languageService.GetSystemLanguage();

3. 验证Info.plist配置

如果上述步骤无效,手动检查Info.plist是否包含以下配置:

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>fr</string>
</array>

确保法语(fr)被包含在本地化列表中,同时可以设置CFBundleDevelopmentRegion为fr作为默认开发区域(可选)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:24