Flutter使用gen_l10n实现多语言支持

实现步骤

  1. 在你的 Flutter 项目的 pubspec.yaml 文件中,确保添加了 flutter_localizations 和 intl 依赖。

    flutter_localizations:
    sdk: flutter
    intl: ^0.18.0

  1. 在 pubspec.yaml 中,添加 flutter 部分的 generate 配置。

    generate: true

  1. 在项目工程根目录新建一个l10n.yaml文件,该文件是是flutter gen-l10n 命令的默认配置文件。

    arb-dir: assets/strings #指定arb多国语文件目录
    template-arb-file: string_zh.arb #指定arb多国语文件
    output-localization-file: app_localizations.dart

  1. 在项目中找一个目录,用于存放创建 ARB 文件(本文中是assets/strings),例如 app_en.arb 和 app_zh.arb。每个文件包含键值对,定义了不同语言的字符串。

    {
    "@@locale": "zh",
    "app_name": "测试",
    "hello": "Hello"

    }

  1. 打开Terminal窗口,运行flutter gen-l10n命令。

    运行后生成的文件目录如下。

  2. 在MaterialApp或GetMaterialApp配置国际化支持。

    localizationsDelegates: AppLocalizations.localiz // 委托定义
    supportedLocales: AppLocalizations.supportedLoca // 支持切换的语言
    fallbackLocale: const Locale('en', ''), // 出错时配置语言

  1. 在需要使用的地方直接调用即可。

    import 'package:flutter_gen/gen_l10n/app_localizations.dart';

    AppLocalizations.of(Get.context!)!.app_name

亦可实现一个公共方法,各个地方的调用均使用公共方法。

复制代码
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

AppLocalizations strings() => AppLocalizations.of(Get.context!)!;

strings().app_name


遇到的问题

  1. 执行flutter gen-l10n时报错。

    这是因为在pubspec.yaml 中,没有添加 flutter 部分的 generate 配置generate: true,添加后再执行即可,参考实现步骤2。
相关推荐
robotx43 分钟前
安卓线程相关
android
消失的旧时光-19431 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon2 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon2 小时前
VSYNC 信号完整流程2
android
dalancon2 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013843 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android4 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才4 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶5 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle
汪海游龙5 小时前
开源项目 Trending AI 招募 Google Play 内测人员(12 名)
android·github