Flutter多语言支持插件polyglot_cli的使用

Flutter多语言支持插件polyglot_cli的使用

Polyglot CLI

polyglot_cli 是一个命令行工具,用于创建带有调用链节点的 Flutter 多语言代理(localizations delegate)。

例如,context.cart.save 中的目录以 cart 命名,并包含 save 部分文件。

安装

从源码安装

dart pub global activate --source=path ./

从 pub.dev 安装

dart pub global activate polyglot_cli

命令

polyglot_cli 提供了多个命令来帮助管理多语言资源:

  • gen - 生成本地化代理
  • import - 从 .arb 文件导入部分
  • init - 初始化新项目
  • join - 将部分合并到 .arb 文件中
  • migrate - 从 .arb 格式迁移到 .yaml 格式

使用示例

初始化新项目

首先,我们需要初始化一个新的项目。在终端中运行以下命令:

polyglot_cli init

这将会创建一个基本的项目结构,包括 l10n 目录,该目录将用于存放多语言文件。

生成本地化代理

接下来,我们需要生成本地化代理。在终端中运行以下命令:

polyglot_cli gen

这将会生成一个本地化代理类,该类将负责管理不同语言的字符串资源。

导入多语言文件

假设我们已经有了一些 .arb 文件,我们可以使用 import 命令将其导入到项目中:

polyglot_cli import

这将会把 .arb 文件中的字符串资源导入到项目中指定的位置。

合并部分到 .arb 文件

如果我们有一些分散的部分文件,可以使用 join 命令将它们合并到 .arb 文件中:

polyglot_cli join

这将会把所有分散的部分文件合并到 .arb 文件中,以便更好地管理和维护多语言资源。

迁移多语言格式

如果我们的项目之前使用的是 .arb 格式,现在想要迁移到 .yaml 格式,可以使用 migrate 命令:

polyglot_cli migrate

更多关于Flutter多语言支持插件polyglot_cli的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter多语言支持插件polyglot_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


polyglot_cli 是一个用于 Flutter 应用的多语言支持的命令行工具。它可以帮助开发者更轻松地管理和生成多语言资源文件。以下是如何使用 polyglot_cli 插件的步骤:

1. 安装 polyglot_cli

首先,你需要全局安装 polyglot_cli 工具。你可以使用 pubdart 命令来安装它:

dart pub global activate polyglot_cli

2. 初始化多语言配置

在你的 Flutter 项目根目录下运行以下命令来初始化多语言配置:

polyglot init

这个命令会生成一个 polyglot.yaml 配置文件,以及一个 l10n 目录,用于存放多语言资源文件。

3. 添加语言支持

polyglot.yaml 文件中,你可以配置支持的语言。例如:

locales:
  - en
  - es
  - fr

4. 添加翻译键值对

l10n 目录下,你会看到为每种语言生成的 .arb 文件。例如:

  • l10n/intl_en.arb
  • l10n/intl_es.arb
  • l10n/intl_fr.arb

你可以在这些文件中添加翻译键值对。例如:

{
  "hello": "Hello",
  "goodbye": "Goodbye"
}

5. 生成多语言资源文件

在添加了翻译键值对后,运行以下命令来生成多语言资源文件:

polyglot generate

这个命令会根据 .arb 文件生成 Dart 代码,并将它们放在 lib/l10n 目录下。

6. 在 Flutter 应用中使用多语言

在生成的代码中,你会找到一个 AppLocalizations 类。你可以在你的 Flutter 应用中使用这个类来获取翻译文本。例如:

import 'package:flutter/material.dart';
import 'package:your_app/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),
        ),
      ),
    );
  }
}
回到顶部