使用Flutter gen-l10n实现App名称及Info.plist权限请求多语言适配
Flutter gen-l10n 实现App名称与Info.plist权限多语言适配
问题背景
我们发现您的App存在影响用户体验的问题,不符合App Store用户预期:
- 当App设置为日语本地化时,权限请求仍为英文。为帮助用户理解权限申请原因,权限请求需与App当前本地化语言一致。
当前pubspec.yaml配置(已修正语法错误):
version: 1.0.0+1 environment: sdk: ">=2.19.6 <3.0.0" dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.18.1 app_tracking_transparency: ^2.0.4 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: uses-material-design: true generate: true # 开启本地化代码生成
一、完善gen-l10n基础配置
1. 补全pubspec.yaml本地化配置
在flutter节点下添加支持的语言列表和代理:
flutter: uses-material-design: true generate: true localizationsDelegates: - GlobalMaterialLocalizations.delegate - GlobalWidgetsLocalizations.delegate - GlobalCupertinoLocalizations.delegate supportedLocales: - en # 英语 - ja # 日语
2. 创建l10n配置文件
在项目根目录新建l10n.yaml,定义生成规则:
arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: app_localizations.dart output-class: AppLocalizations
3. 添加多语言资源文件
在lib/l10n目录下创建两个ARB文件:
app_en.arb(英语资源):
{ "appName": "Your App Name", "trackingPermissionMsg": "We need tracking permission to provide personalized content." }
app_ja.arb(日语资源):
{ "appName": "あなたのアプリ名", "trackingPermissionMsg": "個別のコンテンツを提供するために追跡許可が必要です。" }
运行flutter pub get,自动生成本地化代码。
二、iOS端App名称多语言适配
iOS的App名称本地化需要通过Xcode配置:
- 打开
ios/Runner.xcworkspace,选中Runner项目 →Info→Localizations,点击+添加Japanese - 右键
Info.plist选择Open As→Source Code,替换App名称相关配置:
<key>CFBundleDisplayName</key> <string>$(APP_NAME)</string> <key>CFBundleName</key> <string>$(APP_NAME)</string>
- 在
ios/Runner目录下创建en.lproj/InfoPlist.strings和ja.lproj/InfoPlist.strings:en.lproj/InfoPlist.strings:"APP_NAME" = "Your App Name";ja.lproj/InfoPlist.strings:"APP_NAME" = "あなたのアプリ名";
三、Info.plist权限请求多语言适配(以ATT权限为例)
iOS权限提示文本直接读取本地字符串文件,需在上述InfoPlist.strings中添加对应权限描述:
en.lproj/InfoPlist.strings:"NSUserTrackingUsageDescription" = "We need tracking permission to provide personalized content.";ja.lproj/InfoPlist.strings:"NSUserTrackingUsageDescription" = "個別のコンテンツを提供するために追跡許可が必要です。";
注意:权限文案要和gen-l10n中的内容保持一致,保证用户体验统一。
四、Flutter代码中调用本地化文案
请求权限时,使用gen-l10n生成的本地化类获取文案:
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; Future<void> requestTrackingPermission(BuildContext context) async { final loc = AppLocalizations.of(context)!; // 这里可以用loc.trackingPermissionMsg做前置提示 final status = await AppTrackingTransparency.requestTrackingAuthorization(); // 根据权限状态做后续处理 }
验证步骤
- 运行
flutter pub get更新依赖和本地化代码 - 在iOS模拟器中切换系统语言为日语
- 启动App,检查桌面App名称是否为日语
- 触发权限请求,确认弹窗提示文本为日语
内容的提问来源于stack exchange,提问作者Tdayo
相关产品推荐
相关产品推荐

