Flutter本地化翻译插件translate_local_package的使用

Features

Translate all text by local

Getting Started

只需准备字符串和语言代码即可开始使用。

Usage

以下是一个完整的示例,展示如何在Flutter项目中使用translate_local_package插件进行本地化翻译。

步骤 1: 添加依赖

pubspec.yaml文件中添加translate_local_package依赖:

dependencies:
  translate_local_package: ^1.0.0

运行以下命令以安装依赖:

flutter pub get

步骤 2: 创建本地化文件

创建一个包含不同语言翻译的JSON文件。例如,创建en.json(英语)和zh.json(中文)文件。

en.json (English)

{
  "hello_world": "Hello World",
  "greeting": "Welcome to Flutter"
}

zh.json (Chinese)

{
  "hello_world": "你好世界",
  "greeting": "欢迎使用Flutter"
}

将这些文件放在assets/i18n/目录下。

步骤 3: 配置 pubspec.yaml

确保在pubspec.yaml中添加assets路径:

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

再次运行以下命令以应用更改:

flutter pub get

步骤 4: 初始化本地化

创建一个LocalizationsDelegate类来加载不同的语言文件。

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

class AppLocalizations {
  final Locale locale;

  AppLocalizations(this.locale);

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
  }

  // Load translation file
  static Future<AppLocalizations> load(Locale locale) async {
    String jsonString = await TranslateLocalPackage.load(
        'assets/i18n/${locale.languageCode}.json');
    return AppLocalizations(locale);
  }

  // Create a delegate
  static const LocalizationsDelegate<AppLocalizations> delegate =
      _AppLocalizationsDelegate();

  // Delegate implementation
}

class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
  [@override](/user/override)
  bool isSupported(Locale locale) {
    return ['en', 'zh'].contains(locale.languageCode);
  }

  [@override](/user/override)
  Future<AppLocalizations> load(Locale locale) async {
    return AppLocalizations(locale);
  }

  [@override](/user/override)
  bool shouldReload(covariant LocalizationsDelegate<AppLocalizations> old) {
    return false;
  }
}

步骤 5: 使用本地化文本

在应用程序中使用本地化文本。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Localization Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      supportedLocales: [
        Locale('en', ''), // English
        Locale('zh', ''), // Chinese
      ],
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Locale _locale = Locale('en', '');

  void _changeLanguage(Locale locale) {
    setState(() {
      _locale = locale;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppLocalizations.of(context)!.translate('greeting')),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(AppLocalizations.of(context)!.translate('hello_world')),
            ElevatedButton(
              onPressed: () {
                _changeLanguage(Locale('en', ''));
              },
              child: Text('English'),
            ),
            ElevatedButton(
              onPressed: () {
                _changeLanguage(Locale('zh', ''));
              },
              child: Text('中文'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


translate_local_package 是一个用于 Flutter 应用本地化(国际化)的插件,它可以帮助你轻松地管理和加载不同语言的翻译文件。以下是如何使用 translate_local_package 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  translate_local_package: ^1.0.0  # 请使用最新版本

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

2. 创建翻译文件

assets 目录下创建一个 translations 文件夹,并在其中为每种语言创建一个 JSON 文件。例如:

assets/
  translations/
    en.json
    es.json
    fr.json

每个 JSON 文件的内容应该是一个键值对,键是翻译的标识符,值是翻译的文本。例如,en.json 文件可能如下所示:

{
  "hello": "Hello",
  "welcome": "Welcome to our app"
}

es.json 文件可能如下所示:

{
  "hello": "Hola",
  "welcome": "Bienvenido a nuestra aplicación"
}

3. 配置 pubspec.yaml

pubspec.yaml 文件中,确保你已经将 translations 文件夹添加到 assets 中:

flutter:
  assets:
    - assets/translations/

4. 初始化翻译插件

在你的 Flutter 应用中,初始化 translate_local_package。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await TranslateLocalPackage.init(
    translationsPath: 'assets/translations/',
    defaultLanguage: 'en',
  );

  runApp(MyApp());
}

5. 使用翻译

在你的应用中,你可以使用 TranslateLocalPackage 来获取翻译文本。例如:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(TranslateLocalPackage.translate('welcome')),
        ),
        body: Center(
          child: Text(TranslateLocalPackage.translate('hello')),
        ),
      ),
    );
  }
}

6. 切换语言

你可以使用 TranslateLocalPackage.setLanguage 方法来动态切换应用的语言:

TranslateLocalPackage.setLanguage('es');

7. 获取当前语言

你可以使用 TranslateLocalPackage.currentLanguage 来获取当前应用的语言:

String currentLanguage = TranslateLocalPackage.currentLanguage;

8. 监听语言变化

你可以使用 TranslateLocalPackage.onLanguageChanged 来监听语言的变化:

TranslateLocalPackage.onLanguageChanged.listen((language) {
  print('Language changed to: $language');
});

9. 处理缺失的翻译

如果某个翻译键在当前的翻译文件中不存在,你可以提供一个默认值:

String translation = TranslateLocalPackage.translate('missing_key', defaultValue: 'Default Text');

10. 清理

在应用退出时,你可以调用 TranslateLocalPackage.dispose 来清理资源:

TranslateLocalPackage.dispose();
回到顶部