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

Flutter国际化场景下如何通过Map键值动态调用AppLocalizations获取翻译

Flutter国际化动态获取星期翻译实现方案

Flutter默认禁用dart:mirrors反射库,无法直接通过字符串动态调用AppLocalizations实例的getter属性,可通过以下两种稳妥方案实现需求:


方案1:手动添加统一映射方法(官方推荐,稳定性最高)

步骤1:确保arb文件已配置对应词条

英文词条intl_en.arb配置示例:

{
  "monday": "Monday",
  "tuesday": "Tuesday",
  "wednesday": "Wednesday",
  "thursday": "Thursday",
  "friday": "Friday",
  "saturday": "Saturday",
  "sunday": "Sunday"
}

西班牙语词条intl_es.arb配置示例:

{
  "monday": "Lunes",
  "tuesday": "Martes",
  "wednesday": "Miércoles",
  "thursday": "Jueves",
  "friday": "Viernes",
  "saturday": "Sábado",
  "sunday": "Domingo"
}

步骤2:在AppLocalizations类中新增取值方法

在自动生成的AppLocalizations类中新增统一的星期取值方法:

class AppLocalizations {
  // 原有自动生成的星期getter无需修改
  String get monday => Intl.message('Monday', name: 'monday');
  String get tuesday => Intl.message('Tuesday', name: 'tuesday');
  // ... 其余星期的自动生成getter保留

  // 新增手动映射方法
  String getWeekDay(String key) {
    switch (key) {
      case 'monday': return monday;
      case 'tuesday': return tuesday;
      case 'wednesday': return wednesday;
      case 'thursday': return thursday;
      case 'friday': return friday;
      case 'saturday': return saturday;
      case 'sunday': return sunday;
      default: return key; // 兜底逻辑,找不到匹配key直接返回原字符串
    }
  }
}

步骤3:遍历Map时调用方法获取翻译

final loc = AppLocalizations.of(context);
map.entries.forEach((entry) {
  final displayStr = '${loc.getWeekDay(entry.key)}: ${entry.value}';
  // 此处处理展示逻辑即可
});

方案2:直接调用Intl底层lookup方法(无需手动写switch)

如果不想维护switch映射,可直接通过Intl的消息查询能力获取对应翻译,前提是传入的key和arb文件中的词条名称完全一致:

String getWeekDayTranslation(String key, BuildContext context) {
  return Intl.message(
    '',
    name: key,
    locale: Localizations.localeOf(context).toString(),
  );
}

// 使用示例
final displayStr = '${getWeekDayTranslation(entry.key, context)}: ${entry.value}';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03