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

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

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

getx_multilang_generator 是一个用于在开发基于 GetX 框架的多语言功能时,自动或半自动生成/修改代码的工具。

功能

该插件包含两个主要功能:

  1. .csv 文件生成翻译文件。
  2. 将所有 'string'.tr 的格式替换为 MultiLangKeys.string.tr

开始使用

在你的 pubspec.yaml 文件中添加 getx_multilang_generator

dev_dependencies:
  getx_multilang_generator:

然后运行以下命令以安装依赖项:

flutter pub get

使用说明

1. 从 .csv 文件生成翻译文件

运行以下命令来生成翻译文件:

flutter pub run getx_multilang_generator import-csv

或者指定 .csv 文件的路径:

flutter pub run getx_multilang_generator import-csv folder/file.csv

命令会生成两种文件:

  • multilang.dart:存储翻译内容。
  • multilang_keys.dart:定义键值。

默认情况下,.csv 文件路径为 multilang/multilang.csv。以下是 multilang.csv 的示例:

key,en,id,
add,add,tambah,
warningMessage,there is unexpected error,terjadi kesalahan,

生成的 multilang.dart 文件内容如下:

import 'multilang_keys.dart';
import 'package:peppermint_sdk/peppermint_sdk.dart';

class Multilang extends Translations {
  [@override](/user/override)
  Map<String, Map<String, String>> get keys => {
        'en': {
          MultiLangKeys.add: 'add',
          MultiLangKeys.warningMessage: 'there is unexpected error',
        },
        'id': {
          MultiLangKeys.add: 'tambah',
          MultiLangKeys.warningMessage: 'terjadi kesalahan',
        },
      };
}

生成的 multilang_keys.dart 文件内容如下:

class MultiLangKeys {
  MultiLangKeys._();
  static const String add = 'add';
  static const String warningMessage = 'warningMessage';
}

2. 替换 'string'.tr 格式为 MultiLangKeys.string.tr

运行以下命令将所有 'string'.tr 替换为 MultiLangKeys.string.tr

flutter pub run getx_multilang_generator convert-tr

或者指定 multilang_keys.dart 文件路径:

flutter pub run getx_multilang_generator convert-tr my_project/core/translation/multilang_keys.dart

以下是替换示例:

  • 'add'.trMultiLangKeys.add.tr
  • 'warning'.trMultiLangKeys.warning.tr

完整示例代码

以下是一个完整的示例项目结构及代码,展示如何使用 getx_multilang_generator 实现多语言支持。

1. 创建项目并配置依赖

初始化一个 Flutter 项目:

flutter create my_multi_lang_app
cd my_multi_lang_app

pubspec.yaml 中添加 getx_multilang_generator

dependencies:
  get: ^4.6.5

dev_dependencies:
  getx_multilang_generator:

安装依赖:

flutter pub get

2. 准备 .csv 文件

创建一个 multilang/multilang.csv 文件,内容如下:

key,en,id,
add,add,tambah,
warningMessage,there is unexpected error,terjadi kesalahan,

3. 生成翻译文件

运行以下命令生成翻译文件:

flutter pub run getx_multilang_generator import-csv multilang/multilang.csv

生成的文件如下:

lib/core/translation/multilang.dart

import 'multilang_keys.dart';
import 'package:peppermint_sdk/peppermint_sdk.dart';

class Multilang extends Translations {
  [@override](/user/override)
  Map<String, Map<String, String>> get keys => {
        'en': {
          MultiLangKeys.add: 'add',
          MultiLangKeys.warningMessage: 'there is unexpected error',
        },
        'id': {
          MultiLangKeys.add: 'tambah',
          MultiLangKeys.warningMessage: 'terjadi kesalahan',
        },
      };
}

lib/core/translation/multilang_keys.dart

class MultiLangKeys {
  MultiLangKeys._();
  static const String add = 'add';
  static const String warningMessage = 'warningMessage';
}

4. 修改代码以使用 MultiLangKeys

将所有 'string'.tr 替换为 MultiLangKeys.string.tr

运行以下命令:

flutter pub run getx_multilang_generator convert-tr lib/core/translation/multilang_keys.dart

示例修改前后的对比:

  • 'add'.trMultiLangKeys.add.tr
  • 'warningMessage'.trMultiLangKeys.warningMessage.tr

5. 初始化多语言功能

main.dart 文件中初始化 GetMaterialApp 并设置默认语言:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'core/translation/multilang.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Multi Language App',
      translations: Multilang(), // 设置翻译类
      locale: Locale('en'), // 默认语言
      fallbackLocale: Locale('en'), // 回退语言
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              MultiLangKeys.add.tr, // 使用 MultiLangKeys
            ),
            ElevatedButton(
              onPressed: () {
                Get.updateLocale(Locale('id')); // 切换到印尼语
              },
              child: Text('Switch to Indonesian'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


getx_multilang_generator 是一个用于 Flutter 的插件,它可以帮助你轻松地实现多语言支持,并生成多语言文件。这个插件与 GetX 状态管理库结合使用,能够简化多语言的管理和切换。

安装步骤

  1. 添加依赖: 在你的 pubspec.yaml 文件中添加以下依赖:

    dependencies:
      get: ^4.6.5
      getx_multilang_generator: ^0.0.4
    
    dev_dependencies:
      build_runner: ^2.1.11
  2. 创建多语言文件: 在 lib 目录下创建一个 lang 文件夹,然后在该文件夹下创建 en_US.jsonzh_CN.json 文件,分别表示英文和中文的翻译。

    en_US.json:

    {
      "hello": "Hello",
      "welcome": "Welcome to Flutter"
    }

    zh_CN.json:

    {
      "hello": "你好",
      "welcome": "欢迎使用 Flutter"
    }
  3. 生成多语言类: 在终端中运行以下命令来生成多语言类:

    flutter pub run build_runner build

    这将会生成一个 lang.g.dart 文件,其中包含了你定义的多语言键和对应的翻译。

  4. 使用多语言: 在你的 main.dart 文件中,初始化 GetX 并设置默认语言:

    import 'package:flutter/material.dart';
    import 'package:get/get.dart';
    import 'lang/lang.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return GetMaterialApp(
          translations: Lang(),
          locale: Locale('en', 'US'), // 设置默认语言
          fallbackLocale: Locale('en', 'US'), // 设置回退语言
          home: HomePage(),
        );
      }
    }
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('hello'.tr),
          ),
          body: Center(
            child: Text('welcome'.tr),
          ),
        );
      }
    }
  5. 切换语言: 你可以在应用中动态切换语言,例如:

    ElevatedButton(
      onPressed: () {
        Get.updateLocale(Locale('zh', 'CN')); // 切换到中文
      },
      child: Text('Switch to Chinese'),
    ),
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!