Flutter插件功能介绍插件arb_glue的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

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

1 回复

更多关于Flutter插件功能介绍插件arb_glue的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于Flutter插件arb_glue的功能介绍以及相关代码案例。arb_glue插件主要用于简化和自动化Flutter应用中本地化(国际化)文件的生成和管理。

功能介绍

arb_glue插件的主要功能包括:

  1. 自动生成ARB文件:从Dart代码中的字符串自动生成ARB(Application Resource Bundle)文件,这些文件用于存储应用的本地化字符串。
  2. 同步ARB文件:确保所有生成的ARB文件与源代码中的字符串保持同步,减少手动维护的工作量。
  3. 支持多语言:轻松管理多种语言的本地化资源。

代码案例

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应用中使用本地化字符串。这种方式大大简化了本地化文件的管理和同步工作。

回到顶部