Flutter国际化插件easy_localization_yaml的使用

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

Flutter国际化插件easy_localization_yaml的使用

YamlAssetLoader 是一个替换 easy_localization_loader 包中加载器的工具。它允许你避免导入其他不需要的加载器,从而减少不必要的依赖。此外,它还支持通过 package 参数从包中加载资源。

示例

以下是使用 easy_localization_yaml 的完整示例代码。

import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization_yaml/easy_localization_yaml.dart';
import 'package:flutter/material.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  runApp(
    EasyLocalization(
      // 使用 YamlAssetLoader 替换默认的 AssetLoader
      assetLoader: const YamlAssetLoader(directory: 'assets/translations'),
      fallbackLocale: const Locale('en'),
      path: 'unused', // 这里可以忽略,因为我们将使用 YAML 文件
      startLocale: const Locale('en'),
      supportedLocales: const [Locale('en')],
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'easy_localization_yaml',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: MyHomePage(),

      // 设置本地化信息
      locale: context.locale,
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text('hello'.tr()), // 使用 tr() 方法进行本地化
      ),
    );
  }
}

步骤说明

  1. 导入必要的库

    import 'package:easy_localization/easy_localization.dart';
    import 'package:easy_localization_yaml/easy_localization_yaml.dart';
    import 'package:flutter/material.dart';
    
  2. 初始化应用

    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await EasyLocalization.ensureInitialized();
    
      runApp(
        EasyLocalization(
          assetLoader: const YamlAssetLoader(directory: 'assets/translations'),
          fallbackLocale: const Locale('en'),
          path: 'unused',
          startLocale: const Locale('en'),
          supportedLocales: const [Locale('en')],
          child: MyApp(),
        ),
      );
    }
    
    • assetLoader:指定使用 YamlAssetLoader 加载 YAML 文件。
    • fallbackLocale:设置默认语言为英语。
    • path:这里可以忽略,因为我们使用 YAML 文件。
    • startLocale:设置启动时使用的语言。
    • supportedLocales:设置支持的语言列表。
  3. 创建主应用组件

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'easy_localization_yaml',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: MyHomePage(),
          
          // 设置本地化信息
          locale: context.locale,
          localizationsDelegates: context.localizationDelegates,
          supportedLocales: context.supportedLocales,
        );
      }
    }
    
  4. 创建首页组件

    class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text('hello'.tr()), // 使用 tr() 方法进行本地化
          ),
        );
      }
    }
    

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用easy_localization_yaml插件进行国际化的代码案例。easy_localization_yaml插件使得从YAML文件加载本地化资源变得更加简单。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加easy_localizationeasy_localization_yaml依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_localization: ^3.0.0 # 请检查最新版本
  easy_localization_yaml: ^3.0.0 # 请检查最新版本

2. 创建YAML文件

在你的项目根目录下创建一个assets文件夹(如果还没有的话),然后在其中创建一个YAML文件,例如locales/en.yamllocales/zh.yaml,分别用于英文和中文的翻译。

locales/en.yaml:

app_name: My App
welcome_message: Welcome to My App!

locales/zh.yaml:

app_name: 我的应用
welcome_message: 欢迎来到我的应用!

3. 配置pubspec.yaml

pubspec.yaml文件中,将YAML文件添加到assets部分:

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

4. 初始化Easy Localization

在你的main.dart文件中,进行Easy Localization的初始化。

import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization_yaml/easy_localization_yaml.dart';

void main() async {
  // 加载YAML文件
  await EasyLocalizationYamlLoader().loadYamlFromAssets(['locales/en.yaml', 'locales/zh.yaml']);

  // 设置默认语言环境
  runApp(EasyLocalization(
    supportedLocales: [Locale('en', ''), Locale('zh', '')],
    path: 'assets/locales', // YAML文件路径(相对于项目根目录)
    fallbackLocale: Locale('en', ''), // 默认语言
    child: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: tr('app_name'), // 使用tr函数获取翻译后的文本
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
      localeResolutionCallback: (locale, supportedLocales) {
        // 自定义语言环境解析逻辑,这里使用设备语言环境作为默认
        for (var supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale?.languageCode &&
              supportedLocale.countryCode == locale?.countryCode) {
            return supportedLocale;
          }
        }
        return supportedLocales.first;
      },
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(tr('app_name')),
      ),
      body: Center(
        child: Text(tr('welcome_message')),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 切换语言环境示例
          EasyLocalization.of(context).locale =
              EasyLocalization.of(context).locale.languageCode == 'en'
                  ? Locale('zh')
                  : Locale('en');
        },
        tooltip: 'Switch Language',
        child: Icon(Icons.translate),
      ),
    );
  }
}

5. 运行项目

现在,当你运行你的Flutter项目时,你应该能够看到应用已经加载了YAML文件中的翻译内容,并且可以通过点击浮动操作按钮来切换语言环境。

这个示例展示了如何使用easy_localization_yaml插件进行基本的国际化处理。根据你的需求,你可以进一步扩展和自定义这个基础实现。

回到顶部