Flutter国际化插件sai_l10n_generator的使用
Flutter国际化插件sai_l10n_generator的使用
sai_l10n_generator
是一个用于Flutter项目的自定义Dart代码生成器,它可以自动扫描你的Dart文件中的 .tr
字符串,并生成一个Dart文件 (app_translations.g.dart
) 来管理本地化字符串,同时支持GetX框架。它确保已存在的键在生成的文件中不会被删除,只有新发现的键才会被添加。
特性
- 自动扫描
lib/
目录下的所有Dart文件中的.tr
字符串。 - 为GetX框架所需的结构生成或更新Dart文件以进行本地化。
- 确保现有的本地化键不被删除,只有新发现的键会被添加。
安装
1. 添加依赖
在你的 pubspec.yaml
文件中,将 sai_l10n_generator
作为开发依赖项添加:
dev_dependencies:
sai_l10n_generator: ^1.0.0
build_runner: ^2.1.7
source_gen: ^1.1.1
2. 配置 build.yaml
确保你的包或项目包含以下配置的 build.yaml
文件:
targets:
$default:
builders:
sai*l10n_generator|l10n_builder:
enabled: true
generate_for: - lib/**/_*.dart
builders:
sai_l10n_generator|l10n_builder:
import: "package:sai_l10n_generator/src/l10n_builder.dart"
builder_factories: ["l10nBuilder"]
build_extensions: {".dart": [".g.dart"]}
auto_apply: root_package
build_to: source
applies_builders: ["source_gen|combining_builder"]
此配置告诉 build_runner
处理 lib/
文件夹中的所有Dart文件中的 .tr
字符串,并生成适当的本地化文件。
使用
1. 标记需要本地化的字符串
在你的Dart文件中,使用 .tr
来标记需要本地化的字符串。例如:
Text('helloWorld'.tr),
Text('welcomeMessage'.tr),
.tr
扩展表示该字符串应添加到本地化文件中。
2. 运行生成器
要生成或更新你的本地化Dart文件,可以在终端中运行以下命令:
flutter pub run build_runner build
这会扫描 lib/
文件夹中的所有Dart文件,并生成或更新 lib/core/utils/l10n/app_translations.g.dart
文件中的本地化键。
3. 生成的本地化文件
生成的Dart文件将遵循GetX框架的本地化模式。以下是 app_translations.g.dart
文件的一个示例:
part of 'app_translations.dart';
class _AppTranslation implements AppTranslation {
[@override](/user/override)
Map<String, Map<String, String>> get keys => {
'ar': Locales.ar,
'en': Locales.en,
};
}
class Locales {
static const ar = {
"hello": "",
"welcomeMessage": "",
"clickMe": "",
};
static const en = {
'hello': '',
'welcomeMessage': '',
'clickMe': '',
};
}
你可以在生成的文件中手动填充阿拉伯语(ar
)和英语(en
)的翻译。
4. 保留现有键
生成器会检查 app_translations.g.dart
文件中的任何现有键。如果文件已经包含键,则这些键将 不会 被删除。生成器只会添加在项目中发现的新键。这确保了你手动填充的翻译保持不变。
自定义
默认情况下,该包会为阿拉伯语(ar
)和英语(en
)生成本地化文件。如果你需要支持其他语言,可以扩展生成器以包含更多的本地化映射。
清理构建工件
如果你需要清理生成的构建工件,可以运行:
flutter pub run build_runner clean
这将移除所有的构建缓存,并在下次运行 build_runner
命令时强制重新构建。
示例代码
以下是一个完整的示例代码,展示了如何使用 sai_l10n_generator
插件来实现Flutter应用的国际化。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'core/utils/l10n/app_translations.dart'; // 导入生成的本地化文件
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return GetMaterialApp(
// 使用GetX的翻译并指定初始区域设置
translations: AppTranslation.instance(), // 从app_translations.dart导入的翻译映射
locale: const Locale('en', 'US'), // 默认区域设置(可设置为任何支持的语言)
fallbackLocale: const Locale('en', 'US'), // 如果区域设置不受支持则回退到英语
// 添加Material、Widgets和Cupertino的本地化委托
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('hello'.tr), // 使用GetX翻译 'hello'
actions: [
IconButton(
icon: const Icon(Icons.language),
onPressed: () {
// 在英语和阿拉伯语之间切换
Locale currentLocale = Get.locale!;
if (currentLocale.languageCode == 'en') {
Get.updateLocale(const Locale('ar', 'AR')); // 切换到阿拉伯语
} else {
Get.updateLocale(const Locale('en', 'US')); // 切换到英语
}
},
),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('welcomeMessage'.tr), // GetX翻译 'welcomeMessage'
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 添加按钮点击功能
},
child: Text('clickMe'.tr), // GetX翻译 'clickMe'
),
],
),
),
);
}
}
更多关于Flutter国际化插件sai_l10n_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化插件sai_l10n_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
SaiL10nGenerator
是一个用于简化 Flutter 应用程序国际化的插件。它可以帮助你生成多语言支持所需的代码,从而减少手动编写和管理的复杂性。以下是使用 SaiL10nGenerator
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sai_l10n_generator
和 flutter_localizations
的依赖。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
dev_dependencies:
sai_l10n_generator: ^latest_version
build_runner: ^latest_version
2. 创建 JSON 文件
在项目的 assets
目录下创建 JSON 文件,用于存储不同语言的翻译。例如:
assets/l10n/
en.json
zh.json
en.json
文件内容示例:
{
"hello": "Hello",
"world": "World"
}
zh.json
文件内容示例:
{
"hello": "你好",
"world": "世界"
}
3. 配置 pubspec.yaml
在 pubspec.yaml
文件中配置 assets
路径和 SaiL10nGenerator
。
flutter:
assets:
- assets/l10n/
sai_l10n_generator:
input_dir: assets/l10n
output_dir: lib/l10n
4. 生成代码
运行以下命令来生成国际化代码:
flutter pub run build_runner build
这将在 lib/l10n
目录下生成所需的 Dart 文件。
5. 使用生成的代码
在你的 Flutter 应用中使用生成的代码来支持国际化。
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'l10n/generated/l10n.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
localizationsDelegates: [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(S.of(context).hello),
),
body: Center(
child: Text(S.of(context).world),
),
);
}
}
6. 切换语言
你可以通过以下方式动态切换应用的语言:
Locale newLocale = Locale('zh');
S.load(newLocale);