Flutter国际化资源合并插件merge_arb的使用

Flutter国际化资源合并插件merge_arb的使用

特性

通过此代码生成器,您可以将多个ARB文件合并为一个单一的ARB文件。这使得在Flutter应用中进行字符串本地化时可以将字符串资源拆分为多个文件。

开始使用

首先,您需要在项目中添加merge_arbbuild_runner作为开发依赖项。打开终端并运行以下命令:

flutter pub add --dev merge_arb build_runner

使用方法

接下来,您需要创建ARB文件,并将其放置在lib/l10n目录下。例如,您可以创建以下文件:

  • lib/l10n/en.arb
  • lib/l10n/id.arb
  • 等等。

下面是一个具体的示例,展示如何创建和使用这些ARB文件。

示例代码

首先,创建两个ARB文件:en.arbid.arb

en.arb

{
  "@@locale": "en",
  "welcomeMessage": "Welcome to our app!",
  "goodbyeMessage": "Goodbye!"
}

id.arb

{
  "@@locale": "id",
  "welcomeMessage": "Selamat datang di aplikasi kami!",
  "goodbyeMessage": "Sampai jumpa!"
}

接下来,使用merge_arb插件来合并这些文件。在项目的根目录下运行以下命令:

flutter pub run merge_arb:merge_arb --input=lib/l10n --output=lib/generated/localizations.dart

该命令将读取lib/l10n目录下的所有ARB文件,并生成一个名为localizations.dart的文件,该文件包含了合并后的本地化字符串。

生成的localizations.dart文件

// lib/generated/localizations.dart

import 'package:flutter/material.dart';

class AppLocalizations {
  static Future<AppLocalizations> load(Locale locale) async {
    final String name = locale.countryCode == null ? locale.languageCode : locale.toString();
    final String localeName = Intl.canonicalizedLocale(name);

    return initializeMessages(localeName).then((_) {
      Intl.defaultLocale = localeName;
      return AppLocalizations();
    });
  }

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  String get welcomeMessage {
    return Intl.message(
      'Welcome to our app!',
      name: 'welcomeMessage',
      desc: 'The welcome message shown on the app',
      args: [],
    );
  }

  String get goodbyeMessage {
    return Intl.message(
      'Goodbye!',
      name: 'goodbyeMessage',
      desc: 'The goodbye message shown on the app',
      args: [],
    );
  }
}

现在,您可以在应用中使用这些本地化字符串了。例如,在一个StatefulWidget中使用:

import 'package:flutter/material.dart';
import 'package:your_project_name/generated/localizations.dart';

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      localizationsDelegates: [
        AppLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', ''),
        Locale('id', ''),
      ],
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var localizations = AppLocalizations.of(context);

    return Scaffold(
      appBar: AppBar(
        title: Text(localizations.welcomeMessage),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(localizations.welcomeMessage),
            Text(localizations.goodbyeMessage),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter国际化资源合并插件merge_arb的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter国际化资源合并插件merge_arb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


merge_arb 是一个用于合并 ARB (Application Resource Bundle) 文件的 Flutter 插件。ARB 文件是 Flutter 国际化的重要组成部分,通常用于存储应用程序的本地化字符串。merge_arb 插件可以帮助你轻松地将多个 ARB 文件合并为一个文件,以便在应用程序中使用。

安装 merge_arb 插件

你可以通过在你的 pubspec.yaml 文件中添加依赖来安装 merge_arb 插件:

dev_dependencies:
  merge_arb: ^1.0.0

然后运行 flutter pub get 来安装插件。

使用 merge_arb 插件

  1. 创建 ARB 文件:首先,你需要在你的项目中创建多个 ARB 文件。通常,每个语言会有一个对应的 ARB 文件,例如 app_en.arbapp_es.arb

  2. 运行 merge_arb 命令:你可以使用 merge_arb 命令行工具来合并 ARB 文件。在终端中运行以下命令:

    flutter pub run merge_arb -i app_en.arb,app_es.arb -o app.arb
    
    • -i 参数指定输入文件,多个文件用逗号分隔。
    • -o 参数指定输出文件,即合并后的 ARB 文件。
  3. 使用合并后的 ARB 文件:合并后的 ARB 文件可以用于生成 Flutter 的本地化代码。你可以使用 flutter gen-l10n 命令来生成本地化类:

    flutter gen-l10n
    

    这将生成一个包含所有本地化字符串的类,你可以在你的应用程序中使用这些字符串。

示例

假设你有两个 ARB 文件:

app_en.arb:

{
  "hello": "Hello",
  "world": "World"
}

app_es.arb:

{
  "hello": "Hola",
  "world": "Mundo"
}

运行 merge_arb 命令后,生成的 app.arb 文件可能如下:

{
  "hello": {
    "en": "Hello",
    "es": "Hola"
  },
  "world": {
    "en": "World",
    "es": "Mundo"
  }
}

高级用法

merge_arb 插件还支持其他参数,例如指定默认语言、处理冲突等。你可以通过运行以下命令查看所有可用选项:

flutter pub run merge_arb --help
回到顶部