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
相关产品推荐
相关产品推荐

