Flutter自动本地化插件auto_localization的使用

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

Flutter自动本地化插件auto_localization的使用

auto_localization 是一个用于动态翻译应用文本的新插件。通过该插件,你的应用可以自动检测并翻译语言。

如何工作

该插件旨在提供一种令人信服的方法来翻译各种语言的文本。它使用了Google翻译,并且还包含了一个缓存系统以提高速度。

开始使用

首先,在 pubspec.yaml 文件中添加依赖项:

dependencies:
  ...
  auto_localization: ^2.0.2

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

如何使用

  1. 初始化插件

    在应用启动时,调用 AutoLocalization.init 方法来初始化插件:

    await AutoLocalization.init(
      appLanguage: 'en', // 设置应用默认语言
      userLanguage: 'it' // 设置用户当前语言
    );
    
  2. 翻译文本

    使用 AutoLocalization.translate 方法来翻译特定文本:

    await AutoLocalization.translate("hello");
    
  3. 在小部件中使用翻译

    使用 AutoLocalBuilder 小部件来平滑地翻译文本:

    AutoLocalBuilder(
      text: const ["ciao", "come stai?"], // 设置需要翻译的文本列表
      builder: (TranslationWorker tw) {
        print(tw.get('ciao')); // 使用相同的文本获取其翻译
        print(tw.get('come stai?'));
        return Text(tw.get('ciao')); // 获取翻译后的文本并显示
      }, 
    );
    

示例代码

以下是一个完整的示例代码,展示了如何使用 auto_localization 插件来实现自动本地化:

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

class TranslateATextExample extends StatefulWidget {
  const TranslateATextExample({Key? key}) : super(key: key);

  [@override](/user/override)
  State<TranslateATextExample> createState() => _TranslateATextExampleState();
}

class _TranslateATextExampleState extends State<TranslateATextExample> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return AutoLocalBuilder(
      text: const ["ciao", "come stai?"], // 设置需要翻译的文本列表
      builder: (TranslationWorker tw) {
        print(tw.get('ciao')); // 使用相同的文本获取其翻译
        print(tw.get('come stai?'));
        return Text(tw.get('ciao'),); // 获取翻译后的文本并显示
      },
    );
  }
}

更多关于Flutter自动本地化插件auto_localization的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动本地化插件auto_localization的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用auto_localization插件来实现自动本地化的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了auto_localization依赖:

dependencies:
  flutter:
    sdk: flutter
  auto_localization: ^x.y.z  # 请替换为最新版本号

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

接下来,你需要进行一些配置和编码工作。

1. 配置auto_localization

在项目的根目录下创建一个assets文件夹,并在其中创建一个locales文件夹。在locales文件夹中,创建包含翻译文件的JSON文件。例如,创建en.jsonzh.json

assets/locales/en.json

{
  "app_name": "My App",
  "welcome_message": "Welcome to My App!"
}

assets/locales/zh.json

{
  "app_name": "我的应用",
  "welcome_message": "欢迎来到我的应用!"
}

然后,在pubspec.yaml中声明这些资源文件:

flutter:
  assets:
    - assets/locales/en.json
    - assets/locales/zh.json

2. 初始化auto_localization

在你的main.dart文件中,进行以下配置:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AutoLocalization(
      supportedLocales: [
        Locale('en', ''),
        Locale('zh', ''),
      ],
      pathToLocalizations: 'assets/locales/',
      fallbackLocale: Locale('en', ''), // 设置默认语言
      child: MaterialApp(
        title: AutoLocalization.of(context).translate('app_name'),
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AutoLocalization.of(context).translate('app_name')),
      ),
      body: Center(
        child: Text(AutoLocalization.of(context).translate('welcome_message')),
      ),
    );
  }
}

3. 运行应用

现在,当你运行应用时,它应该默认显示英文翻译。你可以通过更改设备的语言设置或在代码中动态更改语言来测试本地化功能。

4. 动态更改语言(可选)

如果你希望用户能够在应用内动态更改语言,你可以使用以下代码:

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void changeLanguage(Locale locale) {
    AutoLocalization.of(context).setLocale(locale);
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AutoLocalization.of(context).translate('app_name')),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.translate),
            onPressed: () {
              showCupertinoModalPopup<void>(
                context: context,
                builder: (BuildContext context) {
                  return CupertinoActionSheet(
                    title: Text('Change Language'),
                    message: Text('Select your preferred language:'),
                    actions: <CupertinoActionSheetAction>[
                      CupertinoActionSheetAction(
                        child: Text('English'),
                        isDefaultAction: true,
                        onPressed: () {
                          Navigator.of(context).pop();
                          changeLanguage(Locale('en', ''));
                        },
                      ),
                      CupertinoActionSheetAction(
                        child: Text('中文'),
                        onPressed: () {
                          Navigator.of(context).pop();
                          changeLanguage(Locale('zh', ''));
                        },
                      ),
                    ],
                    cancelButton: CupertinoActionSheetAction(
                      isDefaultAction: true,
                      child: Text('Cancel'),
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                    ),
                  );
                },
              );
            },
          ),
        ],
      ),
      body: Center(
        child: Text(AutoLocalization.of(context).translate('welcome_message')),
      ),
    );
  }
}

以上代码添加了一个语言切换按钮,当用户点击该按钮时,会弹出一个动作表,允许用户选择语言。选择语言后,应用将动态切换到所选语言。

希望这能帮助你在Flutter项目中实现自动本地化。如果有更多问题,请随时提问!

回到顶部