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

使用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配置:

  1. 打开ios/Runner.xcworkspace,选中Runner项目 → Info → Localizations,点击+添加Japanese
  2. 右键Info.plist选择Open As → Source Code,替换App名称相关配置:
<key>CFBundleDisplayName</key>
<string>$(APP_NAME)</string>
<key>CFBundleName</key>
<string>$(APP_NAME)</string>
  1. 在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();
  // 根据权限状态做后续处理
}

验证步骤

  1. 运行flutter pub get更新依赖和本地化代码
  2. 在iOS模拟器中切换系统语言为日语
  3. 启动App,检查桌面App名称是否为日语
  4. 触发权限请求,确认弹窗提示文本为日语

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:43:07