Flutter国际化合并插件merge_l10n的使用
Flutter国际化合并插件merge_l10n的使用
Merge l10n files together
这是一个命令行工具,用于将多个.arb
文件合并为一个文件。
目前,该工具会在lib/
目录下搜索.arb
文件,并将合并后的结果放置在l10n/
目录下。
运行以下命令:
dart run merge_l10n
执行后,会生成一个包含合并内容的文件,输出如下:
Building package executable...
Built merge_l10n:merge_l10n.
intl_es: Successfully merged 4 keys from 2 files
intl_en: Successfully merged 4 keys from 2 files
Collisions
如果同一语言文件中存在键名重复的情况,工具会输出问题键及其重复出现的位置。
例如:
Invalid argument(s): Key collision occured
intl_es: `cart__title` was duplicated in:
File: 'lib/features/products/presentation/l10n/intl_es.arb'
File: 'lib/features/cart/presentation/l10n/intl_es.arb'
intl_es: `products__title` was duplicated in:
File: 'lib/features/products/presentation/l10n/intl_es.arb'
File: 'lib/features/cart/presentation/l10n/intl_es.arb'
intl_en: Successfully merged 4 keys from 2 files
TODO
- 自动作用域定义:定义模块范围并生成带有模块范围前缀的键。
- 使用AST树打印更详细的错误信息。
完整示例Demo
1. 项目结构
首先,确保你的项目结构如下:
project/
├── lib/
│ ├── features/
│ │ ├── products/
│ │ │ └── presentation/
│ │ │ └── l10n/
│ │ │ └── intl_es.arb
│ │ │ └── intl_en.arb
│ │ ├── cart/
│ │ │ └── presentation/
│ │ │ └── l10n/
│ │ │ └── intl_es.arb
│ │ │ └── intl_en.arb
├── l10n/
└── pubspec.yaml
2. .arb
文件内容
lib/features/products/presentation/l10n/intl_es.arb
{
"@@locale": "es",
"cart__title": "Carrito de compras",
"products__title": "Productos"
}
lib/features/products/presentation/l10n/intl_en.arb
{
"@@locale": "en",
"cart__title": "Shopping Cart",
"products__title": "Products"
}
lib/features/cart/presentation/l10n/intl_es.arb
{
"@@locale": "es",
"cart__title": "Carrito",
"products__title": "Artículos"
}
lib/features/cart/presentation/l10n/intl_en.arb
{
"@@locale": "en",
"cart__title": "Cart",
"products__title": "Items"
}
3. 运行合并命令
在终端中运行以下命令:
dart run merge_l10n
执行后,生成的文件位于l10n/
目录下:
l10n/intl_es.arb
{
"@@locale": "es",
"cart__title": "Carrito de compras",
"products__title": "Productos",
"cart__title": "Carrito",
"products__title": "Artículos"
}
l10n/intl_en.arb
{
"@@locale": "en",
"cart__title": "Shopping Cart",
"products__title": "Products",
"cart__title": "Cart",
"products__title": "Items"
}
更多关于Flutter国际化合并插件merge_l10n的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化合并插件merge_l10n的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
merge_l10n
是一个用于合并 Flutter 国际化(i18n)文件的插件。它可以帮助开发者将多个 .arb
文件合并为一个,以便在 Flutter 应用中使用。以下是如何使用 merge_l10n
插件的步骤:
1. 安装 merge_l10n
插件
首先,你需要在 pubspec.yaml
文件中添加 merge_l10n
插件的依赖:
dev_dependencies:
merge_l10n: ^0.1.0
然后运行 flutter pub get
来安装插件。
2. 准备 .arb
文件
假设你有多个 .arb
文件,分别位于不同的目录中。例如:
lib/l10n/
├── en.arb
├── es.arb
└── fr.arb
lib/l10n_extra/
├── en.arb
├── es.arb
└── fr.arb
3. 配置 merge_l10n
在 pubspec.yaml
文件中,配置 merge_l10n
插件来指定输入和输出目录:
merge_l10n:
inputs:
- lib/l10n/
- lib/l10n_extra/
output: lib/l10n_merged/
4. 运行 merge_l10n
在终端中运行以下命令来合并 .arb
文件:
flutter pub run merge_l10n
这将会将 lib/l10n/
和 lib/l10n_extra/
目录下的 .arb
文件合并,并输出到 lib/l10n_merged/
目录中。
5. 使用合并后的 .arb
文件
在 pubspec.yaml
文件中,将 flutter_localizations
的 arb-dir
指向合并后的目录:
flutter:
generate: true
l10n:
arb-dir: lib/l10n_merged/
6. 生成国际化代码
运行以下命令来生成国际化代码:
flutter gen-l10n
这将会根据合并后的 .arb
文件生成相应的 Dart 代码。
7. 在应用中使用国际化
在你的 Flutter 应用中使用生成的国际化代码:
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.helloWorld),
),
body: Center(
child: Text(AppLocalizations.of(context)!.welcome),
),
);
}
}