Flutter多语言翻译插件mdtrans的使用

Flutter多语言翻译插件mdtrans的使用

Flutter 中使用多语言翻译插件 mdtrans 可以帮助开发者快速实现应用程序的国际化功能。以下是详细的使用步骤及完整示例代码。


安装插件

首先,在 pubspec.yaml 文件中添加 mdtrans 插件:

dependencies:
  mdtrans: ^版本号

运行以下命令安装依赖:

flutter pub get

配置项目

Android 配置

确保您的项目支持 AndroidX 并且最低编译目标为 API 28 或更高版本。

android/app/src/main/res/values/styles.xml 文件中添加以下内容:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

完整的 styles.xml 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- 显示启动屏幕 -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

然后在 AndroidManifest.xml<application> 标签中添加主题配置:

android:theme="@style/AppTheme"

iOS 配置

iOS 不需要额外的设置,直接跳到使用部分。


示例代码

以下是一个完整的示例代码,展示如何使用 mdtrans 插件进行多语言翻译。

示例代码

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:mdtrans/mdtrans.dart';

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isTranslating = false;

  final mdtrans = Mdtrans();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件,传入多语言翻译所需的 API Key 和基础 URL
    mdtrans.init("YOUR_API_KEY", "YOUR_TRANSLATION_BASE_URL");
    mdtrans.setFinishCallback(_callback);
  }

  // 翻译按钮点击事件
  _translateText() {
    setState(() {
      isTranslating = true;
    });

    mdtrans
        .translate(
          "Hello World", // 待翻译文本
          "en",          // 源语言(英语)
          "zh"           // 目标语言(简体中文)
        )
        .then((translatedText) {
          print("Translated Text: $translatedText");
        })
        .catchError((error) {
          print("Translation Error: $error");
        })
        .whenComplete(() {
          setState(() {
            isTranslating = false;
          });
        });
  }

  // 回调函数
  Future<void> _callback(String translatedText) async {
    return Future.value(null);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: const Text('mdtrans 插件示例'),
        ),
        body: new Center(
          child: isTranslating
              ? CircularProgressIndicator()
              : ElevatedButton(
                  child: Text("Translate Text"),
                  onPressed: () => _translateText(),
                ),
        ),
      ),
    );
  }
}

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

1 回复

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


mdtrans 是一个用于 Flutter 应用的多语言翻译插件,它可以帮助开发者轻松管理应用的国际化(i18n)和本地化(l10n)需求。通过使用 mdtrans,开发者可以将翻译文本存储在 Markdown 文件中,并通过插件生成相应的 Dart 代码,以便在应用中使用。

安装 mdtrans

首先,你需要在 pubspec.yaml 文件中添加 mdtrans 作为开发依赖项:

dev_dependencies:
  mdtrans: ^1.0.0

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

创建翻译文件

mdtrans 使用 Markdown 文件来存储翻译文本。你可以在项目的 assets 目录下创建一个名为 translations 的文件夹,并在其中创建多个 Markdown 文件,每个文件对应一种语言。

例如,创建一个 en.md 文件用于英文翻译:

Hello

Hello, World!

Greeting

Good morning!

Farewell

Goodbye!


再创建一个 `zh.md` 文件用于中文翻译:


# Hello
你好,世界!

# Greeting
早上好!

# Farewell
再见!

生成 Dart 代码

在终端中运行以下命令,mdtrans 会根据 Markdown 文件生成对应的 Dart 代码:

flutter pub run mdtrans

生成的代码将位于 lib/generated/translations.dart 文件中。

使用生成的翻译

在生成的 translations.dart 文件中,你会看到类似以下的代码:

class Translations {
  static const String hello = 'Hello, World!';
  static const String greeting = 'Good morning!';
  static const String farewell = 'Goodbye!';
}

class TranslationsZh {
  static const String hello = '你好,世界!';
  static const String greeting = '早上好!';
  static const String farewell = '再见!';
}

你可以在应用中使用这些常量来显示翻译文本:

import 'generated/translations.dart';

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(Translations.hello),
        ),
        body: Center(
          child: Text(Translations.greeting),
        ),
      ),
    );
  }
}

切换语言

要切换语言,你可以根据用户选择的语言动态加载不同的翻译类:

import 'generated/translations.dart';

class MyApp extends StatelessWidget {
  final String language;

  MyApp({required this.language});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final translations = language == 'zh' ? TranslationsZh() : Translations();

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(translations.hello),
        ),
        body: Center(
          child: Text(translations.greeting),
        ),
      ),
    );
  }
}
回到顶部