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

Flutter国际化:如何获取select类型翻译配置中的所有选项键?

Flutter国际化:如何获取select类型翻译配置中的所有选项键?

嘿,我完全get到你的需求了——你用Flutter Intl的select语法实现了类似Android的多场景翻译(这里是性别代词),现在想要提取出这个配置里的所有选项键(也就是male、female、other这类)对吧?

其实核心思路是解析你的翻译配置字符串,因为select的语法是固定格式,我们可以用正则表达式来匹配提取。下面分两种场景给你解决方案:

1. 直接解析翻译JSON文件

如果你的翻译内容存在JSON文件(比如en.json)里,可以直接读取并解析JSON,再用正则提取选项键:

import 'dart:convert';
import 'dart:io';

void extractSelectKeys() async {
  // 读取翻译JSON文件
  final file = File('lib/l10n/en.json');
  final jsonStr = await file.readAsString();
  final translations = jsonDecode(jsonStr) as Map<String, dynamic>;
  
  // 获取目标翻译项的原始模板字符串
  final targetStr = translations['pronoun'] as String;
  
  // 正则匹配select中的选项键(匹配`{key{`格式里的key)
  final regex = RegExp(r'(\w+)\{');
  final matches = regex.allMatches(targetStr);
  
  // 提取结果并去重(防止意外重复)
  final keys = matches.map((match) => match.group(1))
      .whereType<String>()
      .toSet()
      .toList();
  
  print(keys); // 输出: [male, female, other]
}

2. 运行时从已加载的本地化实例提取

如果已经通过Flutter Intl加载了本地化内容,你可以先获取对应的翻译模板字符串,再用同样的正则方法提取:

import 'package:intl/intl.dart';
import 'package:your_app/l10n/app_localizations.dart';

void getSelectKeys(BuildContext context) {
  final loc = AppLocalizations.of(context)!;
  // 注意:要拿翻译的原始模板字符串,不是已经替换变量后的内容
  final pronounTemplate = "{gender, select, male{he} female{she} other{they}}";
  
  final regex = RegExp(r'(\w+)\{');
  final matches = regex.allMatches(pronounTemplate);
  final keys = matches.map((match) => match.group(1))
      .whereType<String>()
      .toList();
  
  print(keys);
}

小提示

如果你的select选项键包含特殊字符(比如连字符),可以把正则里的\w+改成[\w-]+来适配;如果有嵌套的select语法,可能需要调整正则逻辑来避免误匹配。

备注:内容来源于stack exchange,提问作者Draško

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:08:08