Flutter插件功能介绍插件arb_glue的使用
Flutter插件功能介绍插件arb_glue的使用
ARB Glue 功能介绍
ARB Glue 是是一个工具,用于将多个文件合并成一个单一的 ARB 格式文件,方便管理国际化资源。它支持 YAML 格式,允许注释和多行字符串,并且可以将多个文件合并为一个文件。
安装示例
使用 pub.dev
管理插件:
flutter pub add dev:arb_glue
或者在 pubspec.yaml
中添加依赖:
dev_dependencies:
arb_glue: *
使用示例
原始结构:
.
└── lib/
└── l10n/
├── en/
│ ├── global.yaml
│ └── feature-1.yaml
└── zh/
├── global.yaml
└── feature-1.yaml
执行命令:
dart run arb_glue
# 或者
flutter pub run arb_glue
结果结构:
.
└── lib/
└── l10n/
├── en/
│ ├── global.yaml
│ └── feature-1.yaml
├── zh/
│ ├── global.yaml
│ └── feature-1.yaml
├── en.arb
└── zh.arb
支持的格式
目前,ARB Glue 支持 JSON 和 YAML 编码的文件。
配置示例
通过 pubspec.yaml
配置:
# pubspec.yaml
name: MyApp
arb_glue:
source: lib/l10n
通过命令行配置:
dart run arb_glue --source lib/l10n
完整的配置选项:
arb_glue:
# 源文件夹包含的文件。
#
# 类型:字符串
source: lib/l10n
# 目标文件夹,文件将在其中生成。
#
# 类型:字符串
destination: lib/l10n
# 源文件夹中的黑名单文件夹。
#
# 类型:列表(字符串)
exclude:
# 文件作者信息。
#
# 在本地化 ARB 文件中,它可以包含翻译者的姓名/详情。
# 参见:https://github.com/google/app-resource-bundle/wiki/ApplicationResourceBundleSpecification#global-attributes
# 类型:字符串
author:
# 描述所有这些资源的应用背景。
#
# 参见:https://github.com/google/app-resource-bundle/wiki/ApplicationResourceBundleSpecification#global-attributes
# 类型:字符串
context:
# 是否添加文件的最后修改时间。
#
# 类型:布尔值
lastModified: true
# ARB 文件的默认值。
#
# 如果未提供,则第一个找到的本地语言作为基本地语言。
# 基本地语言提供其他本地语言的默认占位符。
#
# 类型:字符串
base:
# select/plural 模式的默认值。
#
# 参见示例以获取更多详细信息。
#
# 类型:字符串
defaultOtherValue: UNKNOWN
# 输出 ARB 文件的模板。
#
# 类型:字符串
fileTemplate: '{lang}.arb'
# 是否打印详细的输出。
#
# 类型:布尔值
verbose: false
示例代码
# example/README.md
In this example, we'll demonstrate how to use ARB Glue to merge multiple language files into a single ARB format file.
Suppose we have the following directory structure containing language files:
.
└── example/
├── en/
│ ├── global.yaml
│ └── feature-1.yaml
└── zh/
├── global.yaml
└── feature-1.yaml
Contents of global.yaml (English):
okButton:
text: "OK"
description: "Finish the process"
...
Contents of feature-1.yaml (English):
$prefix: feature1
title: "Feature 1"
...
Contents of global.yaml (Chinese):
okButton: "確定"
...
Contents of feature-1.yaml (Chinese):
$prefix: "feature1"
title: "功能 1"
...
Using ARB Glue:
To merge these files using ARB Glue, follow these steps:
1. Execute ARB Glue:
dart run arb_glue --source example --destination example --base en
2. Verify Output:
After executing ARB Glue, the directory structure will be updated as follows:
.
└── example/
├── en/
│ ├── global.yaml
│ └── feature-1.yaml
├── zh/
│ ├── global.yaml
│ └── feature-1.yaml
├── en.arb
└── zh.arb
Output ARB Files:
Contents of en.arb:
{
"[@locale](/user/locale)": "en",
"okButton": "OK",
"[@okButton](/user/okButton)": {
"description": "Finish the process"
},
"feature1Title": "Feature 1",
"...": "..."
}
Contents of zh.arb:
{
"[@locale](/user/locale)": "zh",
"okButton": "確定",
"[@okButton](/user/okButton)": {
"description": "Finish the process"
},
"feature1Title": "功能 1",
"...": "..."
}
更多关于Flutter插件功能介绍插件arb_glue的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件功能介绍插件arb_glue的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于Flutter插件arb_glue
的功能介绍以及相关代码案例。arb_glue
插件主要用于简化和自动化Flutter应用中本地化(国际化)文件的生成和管理。
功能介绍
arb_glue
插件的主要功能包括:
- 自动生成ARB文件:从Dart代码中的字符串自动生成ARB(Application Resource Bundle)文件,这些文件用于存储应用的本地化字符串。
- 同步ARB文件:确保所有生成的ARB文件与源代码中的字符串保持同步,减少手动维护的工作量。
- 支持多语言:轻松管理多种语言的本地化资源。
代码案例
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加arb_glue
依赖:
dependencies:
flutter:
sdk: flutter
arb_glue: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 定义本地化字符串
在你的Dart代码中,定义一个包含本地化字符串的类。例如,创建一个名为localizations.dart
的文件:
import 'package:arb_glue/arb_glue.dart';
class MyLocalizations {
static final ArbMap _arbMap = {
'welcome_message': 'Welcome to our app!',
'goodbye_message': 'Goodbye!',
};
static String welcomeMessage(ArbLocalizations arb) => arb.lookup('welcome_message')!;
static String goodbyeMessage(ArbLocalizations arb) => arb.lookup('goodbye_message')!;
}
3. 生成ARB文件
在你的build.yaml
文件中配置arb_glue
:
targets:
$default:
builders:
arb_glue:
enabled: true
options:
output_directory: lib/l10n
arb_files_glob: lib/l10n/*.arb.json
然后,在你的项目根目录下运行以下命令来生成ARB文件:
flutter pub run build_runner build
这将生成一个包含你定义的本地化字符串的ARB文件(例如lib/l10n/my_localizations.arb
)。
4. 使用生成的本地化资源
创建一个localizations_delegate.dart
文件来加载生成的本地化资源:
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // 自动生成的文件
import 'package:intl/intl.dart';
class MyLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const MyLocalizationsDelegate();
@override
bool isSupported(Locale locale) =>
['en', 'fr', 'es'].contains(locale.languageCode); // 支持的语言列表
@override
Future<AppLocalizations> load(Locale locale) {
return AppLocalizations.load(locale);
}
@override
bool shouldReload(MyLocalizationsDelegate oldDelegate) => false;
}
在你的主应用文件中(例如main.dart
),使用MaterialApp
并设置本地化委托:
import 'package:flutter/material.dart';
import 'localizations_delegate.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: [
MyLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('en', ''),
Locale('fr', ''),
Locale('es', ''),
],
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final AppLocalizations localizations = Localizations.of<AppLocalizations>(context)!;
return Scaffold(
appBar: AppBar(
title: Text(localizations.welcomeMessage), // 使用本地化字符串
),
body: Center(
child: Text(localizations.goodbyeMessage), // 使用本地化字符串
),
);
}
}
注意:在实际使用中,AppLocalizations
类是由flutter_gen
或类似工具自动生成的,用于访问ARB文件中的本地化字符串。
通过以上步骤,你已经成功配置了arb_glue
插件,并能够在Flutter应用中使用本地化字符串。这种方式大大简化了本地化文件的管理和同步工作。