Flutter国际化代码生成插件translations_code_gen的使用
Flutter国际化代码生成插件translations_code_gen的使用
Translations Code Generator
这是一款用于为Dart/Flutter项目生成国际化代码的简单工具。
安装
1. 添加依赖
在 pubspec.yaml
文件中添加依赖:
dependencies:
translations_code_gen: ^1.2.1
2. 运行此命令
flutter pub get
使用
1. 在 assets
文件夹中创建翻译文件
在项目的根目录下创建一个名为 assets
的文件夹,并在其中创建名为 en.json
和 ar.json
的文件,并添加以下内容:
例子:assets/translations/en.json
{
"GENERAL": {
"HELLO": "Hello",
"WELCOME": "Welcome"
},
"HOME": {
"TITLE": "Home"
}
}
例子:assets/translations/ar.json
{
"GENERAL": {
"HELLO": "مرحبا",
"WELCOME": "أهلا بك"
},
"HOME": {
"TITLE": "الرئيسية"
}
}
2. 将翻译文件路径添加到 pubspec.yaml
或 translations_code_gen.yaml
文件中
在 pubspec.yaml
文件中添加以下内容:
translations_code_gen:
keys:
input: 'assets/translations/en.json'
output: 'lib/translations/keys.dart'
values:
input: 'assets/translations/'
output: 'lib/translations/values/'
运行以下命令以生成翻译的 keys
和 values
:
flutter pub run translations_code_gen
-g
或 --generate
标志是可选的。如果不使用它,工具将自动生成 Dart 键和值代码。
这将在 lib/translations/keys.dart
文件中生成以下键:
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: constant_identifier_names, camel_case_types
class GENERAL {
static const String HELLO = "GENERAL.HELLO";
static const String WELCOME = "GENERAL.WELCOME";
}
class HOME {
static const String TITLE = "HOME.TITLE";
}
并将在 lib/translations/values/
文件夹下的 en.dart
和 ar.dart
文件中生成以下值:
例子:lib/translations/values/en.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: constant_identifier_names
import '../keys.dart'; // 有时你需要更改此路径以匹配你的项目结构
const Map<String, String> _general = {
GENERAL.HELLO: "Hello",
GENERAL.WELCOME: "Welcome",
};
const Map<String, String> _home = {
HOME.TITLE: "Home",
};
final Map<String, String> enValues = {
..._general,
..._home,
};
例子:lib/translations/values/ar.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: constant_identifier_names
import '../keys.dart'; // 有时你需要更改此路径以匹配你的项目结构
const Map<String, String> _general = {
GENERAL.HELLO: "مرحبا",
GENERAL.WELCOME: "أهلا بك",
};
const Map<String, String> _home = {
HOME.TITLE: "الرئيسية",
};
final Map<String, String> enValues = {
..._general,
..._home,
};
你可能需要更改键的导入路径以匹配你的项目结构。
3. 使用生成的代码
import 'package:flutter/material.dart';
import './translations/keys.dart';
// 任何翻译包
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(HOME.TITLE.tr()),
),
body: Center(
child: Text(GENERAL.HELLO.tr()),
),
);
}
}
4. 同上,但使用 --generate
标志
flutter pub run translations_code_gen --generate=json-values
有四种类型的代码生成模式:
dart
(默认):生成 Dart 键和值代码。dart-keys
:仅生成 Dart 键。dart-values
:仅生成 Dart 值。json-values
:仅生成 JSON 值。
使用 --generate=json-values
标志的输出
例子:lib/translations/values/en.json
{
"GENERAL.HELLO": "Hello",
"GENERAL.WELCOME": "Welcome",
"HOME.TITLE": "Home"
}
例子:lib/translations/values/ar.json
{
"GENERAL.HELLO": "مرحبا",
"GENERAL.WELCOME": "أهلا بك",
"HOME.TITLE": "الرئيسية"
}
更多关于Flutter国际化代码生成插件translations_code_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化代码生成插件translations_code_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter国际化代码生成插件translations_code_gen
的示例。这个插件可以帮助你自动生成用于Flutter应用的本地化代码。
步骤 1: 添加依赖
首先,你需要在你的pubspec.yaml
文件中添加translations_code_gen
依赖。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
dev_dependencies:
build_runner: ^2.1.4
translations_code_gen: ^0.1.0 # 请注意版本号,使用最新的稳定版本
步骤 2: 创建国际化文件
在你的项目根目录下创建一个intl
文件夹,并在其中创建一个JSON文件,例如messages_en.json
和messages_zh.json
,分别用于英文和中文的翻译。
messages_en.json:
{
"greeting": "Hello, World!",
"farewell": "Goodbye!"
}
messages_zh.json:
{
"greeting": "你好,世界!",
"farewell": "再见!"
}
步骤 3: 配置build.yaml
在项目根目录下创建一个build.yaml
文件,并配置translations_code_gen
生成代码的相关信息。
targets:
$default:
builders:
translations_code_gen:translations:
enabled: true
options:
output_class: S
input_dir: intl
output_dir: lib/l10n
步骤 4: 生成代码
在终端中运行以下命令来生成国际化代码:
flutter pub run build_runner build
这个命令会根据你配置在build.yaml
中的路径和选项生成国际化代码。
步骤 5: 使用生成的代码
生成代码后,你会在lib/l10n
目录下看到生成的类文件,例如S.dart
。你可以在你的Flutter应用中使用这个类来访问本地化字符串。
首先,确保你在应用的MaterialApp中设置了本地化代理:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'l10n/S.dart'; // 导入生成的本地化类
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
S.delegate, // 添加生成的本地化代理
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales, // 添加支持的本地化
home: MyHomePage(),
);
}
}
然后,在你的Widget中使用生成的本地化字符串:
import 'package:flutter/material.dart';
import 'l10n/S.dart'; // 导入生成的本地化类
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final S local = S.of(context); // 获取本地化实例
return Scaffold(
appBar: AppBar(
title: Text(local.greeting), // 使用本地化字符串
),
body: Center(
child: Text(local.farewell), // 使用本地化字符串
),
);
}
}
这样,你就可以使用translations_code_gen
插件来生成和管理Flutter应用的本地化代码了。根据用户的设备语言设置,应用会自动显示相应的本地化字符串。