Flutter Google Sheets转换ARB插件gsheet_to_arb的使用
Flutter Google Sheets转换ARB插件gsheet_to_arb的使用
- 从Google表格导入Application Resource Bundle(ARB)
- 自动创建Dart intl 类
- 按类别(上下文)分组翻译
- 支持占位符和复数
使用方法
从Google表格导入翻译文件
- 设置插件配置yaml文件(只需执行一次)。
- 从Google表格导入ARB和源文件:
pub run gsheet_to_arb:import
或者对于Flutter项目:
flutter pub run gsheet_to_arb:import

设置
1. 基于模板创建翻译电子表格
- 复制模板到您的Google Drive账户 -
文件 -> 创建副本
- 保存电子表格的
DOCUMENT_ID
- https://docs.google.com/spreadsheets/d/DOCUMENT_ID/edit#gid=0 - 更多关于电子表格结构的详细信息,请参见电子表格格式部分。
2. 创建Google Sheets API凭据
通过客户端或服务器认证创建Google Sheets API凭据。
3. 配置您的Dart项目
- 在
pubspec.yaml
中添加gsheet_to_arb
开发依赖:
dev_dependencies:
gsheet_to_arb: ^0.1.8
-
更新依赖项:
pub update
-
创建插件配置:
pub run gsheet_to_arb:import --create-config
- 这将在
pubspec.yaml
文件中添加插件配置,并为Google Sheets凭据创建gsheet_to_arb.yaml
认证文件。
- 更新在
pubspec.yaml
中创建的插件配置,例如:
gsheet_to_arb:
arb_file_prefix: 'intl' # 生成的ARB文件的后缀,例如intl_en.arb
localization_file_name: 'l10n' # 生成的Dart文件名,例如L10n.dart
output_directory: 'lib/l10n' # 所有Dart和ARB数据存储的位置
add_context_prefix: false # 是否为键添加类别前缀,例如common_app_title
gsheet:
auth_file: './gsheet_to_arb.yaml' # 包含Google Sheets认证配置的文件
category_prefix: "# "
document_id: 'TODO'
sheet_id: '0'
columns: # 可选设置,未使用时将回退到默认值
key: 0 # 翻译键所在的列,默认为0
description: 1 # 描述所在的列,默认为1
first_language_key: 2 # 第一个语言列,假设所有后续列也包含语言翻译,默认为2
rows: # 可选设置,未使用时将回退到默认值
header_row: 0 # 包含每列标题的行,默认为0
first_translation_row: 1 # 包含翻译的第一行,默认为1
- 更新在
gsheet_to_arb.yaml
中创建的Google Sheets认证配置。- 添加客户端凭据:
oauth_client_id:
client_id: "TODO"
client_secret: "TODO"
- 或者添加服务账户凭据:
service_account_key:
client_id: "TODO"
client_email: "TODO"
private_key: "TODO"
电子表格格式
行
- 第一行保留用于标题部分,包含相关列的标签。
- 其他行:
- 如果行以
category_prefix
值(默认为#
)开头,则所有后续行将使用该类别作为上下文(参见:ARB上下文和add_context_prefix
参数)。 - 空行被忽略。
- 键列为空的行被忽略。
- 如果行以
列
- 第一列
key
包含键名称或类别前缀。 - 第二列
description
包含项目描述。 - 所有后续列(语言代码,例如
en
、pl
等)包含翻译文件。 - 将从第一个语言列开始解析,直到最后一个列或第一个空列,以先出现者为准。
值
占位符
- 简单地在翻译中添加
{placeholder_name}
。
复数
- 复数由键元数据识别 - 如果键以以下之一结尾:
- zero, one, two, few, many, other - 则被视为复数。
- 复数使用特殊占位符
{count}
来标记用作翻译参数的值。
示例代码
以下是完整的示例代码,展示如何使用生成的Dart类:
import 'package:intl/intl.dart';
import 'l10n/_messages_all.dart';
import 'l10n/l10n.dart';
void main() async {
print('MAIN');
// 设置默认区域为波兰语
Intl.defaultLocale = 'pl';
await initializeMessages(Intl.defaultLocale);
// 初始化本地化类
final l10n = L10n();
// 打印翻译结果
print(l10n.title); // 输出标题
print(l10n.login); // 输出登录文本
print(l10n.singleArgument('arg')); // 输出单个参数的翻译
print(l10n.twoArguments('arg1', 'arg2')); // 输出两个参数的翻译
// 测试复数
print(l10n.numberOfSongsAvailable(0)); // 输出歌曲数量为0的翻译
print(l10n.numberOfSongsAvailable(1)); // 输出歌曲数量为1的翻译
print(l10n.numberOfSongsAvailable(2)); // 输出歌曲数量为2的翻译
print(l10n.numberOfSongsAvailable(5)); // 输出歌曲数量为5的翻译
print(l10n.numberOfSongsAvailable(10)); // 输出歌曲数量为10的翻译
}
更多关于Flutter Google Sheets转换ARB插件gsheet_to_arb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
gsheet_to_arb
是一个用于将 Google Sheets 转换为 ARB(Application Resource Bundle)文件的 Flutter 插件。ARB 文件是 Flutter 国际化(i18n)中常用的一种 JSON 格式,用于存储应用程序的本地化字符串。
以下是使用 gsheet_to_arb
插件的步骤:
1. 安装 gsheet_to_arb
插件
首先,你需要在 pubspec.yaml
文件中添加 gsheet_to_arb
依赖:
dependencies:
gsheet_to_arb: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 准备 Google Sheets
在 Google Sheets 中创建一个表格,表格的每一列代表一种语言,每一行代表一个键值对。例如:
Key | en | es | fr |
---|---|---|---|
hello | Hello | Hola | Bonjour |
goodbye | Goodbye | Adiós | Au revoir |
3. 获取 Google Sheets 的共享链接
将 Google Sheets 设置为“任何人可以查看”,然后获取其共享链接。链接的格式通常为:
https://docs.google.com/spreadsheets/d/<SPREADSHEET_ID>/edit#gid=<SHEET_ID>
4. 使用 gsheet_to_arb
插件
在你的 Dart 代码中,使用 gsheet_to_arb
插件将 Google Sheets 转换为 ARB 文件。以下是一个示例代码:
import 'package:gsheet_to_arb/gsheet_to_arb.dart';
void main() async {
final spreadsheetId = '<SPREADSHEET_ID>';
final sheetId = '<SHEET_ID>';
final outputDirectory = 'lib/l10n';
final converter = GSheetToArb(
spreadsheetId: spreadsheetId,
sheetId: sheetId,
outputDirectory: outputDirectory,
);
await converter.convert();
}
5. 运行代码
运行你的 Dart 代码,gsheet_to_arb
插件将会从 Google Sheets 中读取数据,并将其转换为 ARB 文件,存储在指定的 outputDirectory
中。
6. 在 Flutter 项目中使用 ARB 文件
生成的 ARB 文件可以直接用于 Flutter 的国际化支持。你可以使用 flutter_localizations
和 intl
包来加载和使用这些本地化字符串。
7. 更新 pubspec.yaml
文件
确保你的 pubspec.yaml
文件中包含以下依赖:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.17.0
8. 配置 l10n.yaml
文件
在项目根目录下创建一个 l10n.yaml
文件,配置 ARB 文件的位置:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
9. 生成本地化代码
运行以下命令生成本地化代码:
flutter pub run intl_utils:generate
10. 在应用中使用本地化字符串
在你的 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: Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.hello),
),
body: Center(
child: Text(AppLocalizations.of(context)!.goodbye),
),
),
);
}
}