Flutter gen-l10n本地化问题:GitHub Actions编译失败及输出目录异常
解决方案
方案1:通过pubspec.yaml配置固定输出目录(推荐)
命令行指定--output-dir不生效,是因为Flutter官方的gen-l10n会优先读取pubspec.yaml中的配置。直接在配置文件里定义输出路径,确保本地和CI环境生成路径一致:
- 打开项目根目录的
pubspec.yaml,在flutter节点下添加本地化输出配置:
flutter: generate: true localizations: sdk: flutter locales: - en # 你的本地化语言列表 - zh output-dir: lib/flutter_gen/l10n # 指定输出到lib目录下 output-class: AppLocalizations # 保持类名和之前一致
执行
flutter gen-l10n,此时文件会生成到lib/flutter_gen/l10n目录下,而非.dart_tool。修改代码中的导入路径,替换为项目包名的绝对导入:
import 'package:你的项目名称/flutter_gen/l10n/app_localizations.dart';
(注:你的项目名称是pubspec.yaml中name字段的值)
方案2:在GitHub Actions中显式执行生成命令
如果不想改动输出目录,只需在CI构建流程中先执行本地化文件生成步骤,确保.dart_tool下的文件存在:
在你的GitHub Actions workflow文件(如.github/workflows/build.yml)中,添加生成步骤:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 with: flutter-version: '3.x' # 指定你的Flutter版本 - name: Get dependencies run: flutter pub get - name: Generate localization files run: flutter gen-l10n # 显式执行生成命令 - name: Build app run: flutter build apk # 替换为你的构建命令
关键说明
- 本地环境中你可能手动执行过
flutter gen-l10n,但GitHub Actions的CI环境是全新的,默认不会自动生成本地化文件,必须显式添加生成步骤。 - 如果同时配置了
pubspec.yaml的output-dir和命令行参数,pubspec的配置会覆盖命令行参数,这也是你之前指定--output-dir无效的原因。
内容的提问来源于stack exchange,提问作者Arty
相关产品推荐
相关产品推荐

