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

Flutter iOS端如何正确获取系统语言对应的地区变体标识?

问题根因

iOS系统的「语言」和「地区」是两个独立设置项,dart:io包中Platform.localeName返回的是系统地区设置和首选语言拼接的结果,当你把地区设为荷兰、语言设为英语(英国)时,拿到的就是en_NL,因此countryCode为NL。

解决方案

不要使用Platform接口获取,改用Flutter框架提供的系统首选语言列表API,就能直接拿到对应语言绑定的地区标识:

import 'package:flutter/widgets.dart';

// 初始化Flutter绑定(在main函数中提前调用过则无需重复执行)
WidgetsFlutterBinding.ensureInitialized();

// 取系统优先语言列表,排序越靠前优先级越高
final List<Locale> systemLocales = WidgetsBinding.instance.platformDispatcher.locales;
// 取优先级最高的首选语言
final Locale firstPreferredLocale = systemLocales.first;

final String languageCode = firstPreferredLocale.languageCode; // 返回en
final String? countryCode = firstPreferredLocale.countryCode; // 返回GB

注意事项

  • 英语(英国)对应的标准ISO 3166国家码是GB而非UK,系统不会直接返回UK,如果你业务需要使用UK标识,可自行做简单的映射替换。
  • 如果你使用的是较旧版本的Flutter,也可以用window.locales获取列表,不过该API已被废弃,推荐优先使用platformDispatcher。
  • 如果你要获取应用当前已生效的本地化Locale,可以直接使用Localizations.localeOf(context),前提是你已经在MaterialApp/CupertinoApp中配置了对应的supportedLocales列表。

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:48:00