Flutter国际化翻译生成插件dhn_translation_generator的使用

Flutter国际化翻译生成插件dhn_translation_generator的使用

Generate Translation Service class from translation file

特性

列出您的包可以做什么。也许可以包含图片、GIF或视频。

开始使用

列出先决条件并提供或指向如何开始使用该包的信息。

使用方法

为包用户提供简短且有用的示例。将更长的示例添加到/example文件夹中。

const like = 'sample';

示例代码

以下是一个完整的示例,展示如何使用dhn_translation_generator插件生成国际化翻译服务类。

1. 添加依赖

pubspec.yaml文件中添加dhn_translation_generator作为开发依赖:

dev_dependencies:
  dhn_translation_generator: ^1.0.0

然后运行flutter pub get以安装依赖。

2. 创建翻译文件

创建一个包含所有翻译键值对的JSON文件,例如assets/i18n/en.json(英语)和assets/i18n/zh.json(中文)。

en.json

{
  "hello": "Hello",
  "welcome": "Welcome",
  "greet": "Nice to meet you"
}

zh.json

{
  "hello": "你好",
  "welcome": "欢迎",
  "greet": "很高兴见到你"
}

3. 配置生成器

lib/main.dart文件中配置dhn_translation_generator,指定翻译文件路径和生成的服务类名。

import 'package:dhn_translation_generator/dhn_translation_generator.dart';

void main() {
  // 指定翻译文件目录
  const translationDirectory = 'assets/i18n';

  // 指定生成的服务类名
  const generatedClassName = 'AppTranslations';

  // 调用生成器
  generateTranslations(
    translationDirectory: translationDirectory,
    generatedClassName: generatedClassName,
  );
}

4. 运行生成脚本

在终端中运行以下命令以生成翻译服务类:

flutter pub run build_runner build

生成的文件会保存在lib/generated/app_translations.dart中。

5. 使用生成的翻译服务类

在项目中使用生成的翻译服务类AppTranslations来获取翻译文本。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppTranslations.of(context).text('hello')),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(AppTranslations.of(context).text('welcome')),
            Text(AppTranslations.of(context).text('greet')),
          ],
        ),
      ),
    );
  }
}

6. 运行应用

确保在MaterialApp中设置了locale以切换语言。例如:

home: MyHomePage(),
supportedLocales: [
  Locale('en', 'US'),
  Locale('zh', 'CN'),
],
localizationsDelegates: [
  AppTranslationsDelegate(),
],

更多关于Flutter国际化翻译生成插件dhn_translation_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter国际化翻译生成插件dhn_translation_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dhn_translation_generator 是一个用于 Flutter 应用的国际化翻译生成插件。它可以帮助开发者自动生成翻译文件,简化国际化流程。以下是如何使用 dhn_translation_generator 的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dhn_translation_generatorbuild_runner 依赖。

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.17.0  # 如果你还没有添加 intl 包

dev_dependencies:
  build_runner: ^2.1.0
  dhn_translation_generator: ^0.0.1  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 创建翻译文件

lib 目录下创建一个 l10n 文件夹,用于存放翻译文件。然后创建一个 arb 文件,例如 app_en.arbapp_zh.arb,分别对应英文和中文翻译。

app_en.arb

{
  "@@locale": "en",
  "hello": "Hello",
  "world": "World"
}

app_zh.arb

{
  "@@locale": "zh",
  "hello": "你好",
  "world": "世界"
}

3. 生成翻译类

lib 目录下创建一个 l10n.dart 文件,并添加以下代码:

import 'package:dhn_translation_generator/dhn_translation_generator.dart';

part 'l10n.g.dart';  // 生成的代码文件

@DhnTranslation('lib/l10n/app_')
class L10n {
  static const supportedLocales = [
    Locale('en', ''),
    Locale('zh', ''),
  ];
}

4. 运行生成命令

接下来,运行以下命令来生成翻译类:

flutter pub run build_runner build

这将生成一个 l10n.g.dart 文件,其中包含了根据 arb 文件生成的翻译类。

5. 在应用中使用翻译

现在你可以在应用中使用生成的翻译类了。例如:

import 'package:flutter/material.dart';
import 'l10n/l10n.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      locale: Locale('zh'),  // 设置当前语言
      supportedLocales: L10n.supportedLocales,
      localizationsDelegates: [
        L10n.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(L10n.of(context).hello),
      ),
      body: Center(
        child: Text(L10n.of(context).world),
      ),
    );
  }
}

6. 切换语言

你可以通过设置 locale 来切换应用的语言。例如:

Locale locale = Locale('zh');  // 切换到中文
回到顶部