Flutter本地化管理插件best_flutter_localization的使用

Flutter本地化管理插件best_flutter_localization的使用

best_flutter_localization 插件是一个用于移动应用中最常用词汇的本地化包。使用该插件可以轻松地对应用程序进行本地化。

特性

通过此插件,我们可以轻松地对应用程序进行本地化。 Flutter 本地化是指将您的 Flutter 应用程序适应不同的语言、地区和文化。它允许您创建可以在全球范围内使用的应用程序,通过提供文本和内容的翻译,以及调整日期和时间格式、数字格式等以适应目标受众。

开始使用

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

dependencies:
  flutter:
    sdk: flutter
  best_naveen_localization:

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

使用方法

常见翻译

该插件提供了一组预定义的常见翻译,这些翻译可以通过 CommonTranslations 访问。这些包括基本词汇如 ‘back’(返回)、‘cancel’(取消)、‘confirm’(确认)、‘contactUs’(联系我们)等。这一功能使得无需手动定义即可快速访问标准翻译。

自定义翻译

该插件允许创建自定义翻译。这可以通过为每种语言定义一个翻译映射来实现。示例提供了英语(‘en’)、芬兰语(‘fi’)和阿拉伯语(‘ar’)的翻译,例如 ‘explore’(探索)、‘profile’(个人资料)和 ‘name’(姓名)。

手动设置语言

有一种选项可以手动设置翻译的语言,使用 GetLocale.langcode。这对于需要动态设置语言或覆盖设备默认语言的场景非常有用。

分配和检索翻译

自定义翻译被分配给 GetTranslate.translations。检索翻译也很简单,使用 GetTranslate.getTranslation(key),其中 key 是要翻译的单词或短语。

示例代码

以下是一个简单的示例,演示如何导入并使用 best_flutter_localization 插件。

import 'package:flutter/material.dart';
import 'package:best_flutter_localization/best_naveen_localization.dart';

void main() {
  // 如果要使用常见词翻译,则可以直接使用
  print(CommonTranslations.back);
  print(CommonTranslations.cancel);
  print(CommonTranslations.confirm);
  print(CommonTranslations.contactUs);
  print(CommonTranslations.yes);
  print(CommonTranslations.newMessages);
  print(CommonTranslations.next);
  print(CommonTranslations.changePassword);
  print(CommonTranslations.areYouSure);
  print(CommonTranslations.contact);
  print(CommonTranslations.location);

  // 或者可以像这样创建自己的翻译
  final Map<String, Map<String, String>> translations = {
    'en': {'explore': 'Explore', 'profile': 'Profile', 'name': 'Name'},
    'fi': {'explore': 'Selaa', 'profile': 'Profiili', 'name': 'Nimi'},
    'ar': {'explore': 'استكشاف', 'profile': 'الملف الشخصي', 'name': 'اسم'}
  };

  // 如果要手动设置语言,则分配语言代码
  GetLocale.langcode = 'en';

  // 设置翻译映射
  GetTranslate.translations = translations;

  // 检索并打印翻译
  String profile = GetTranslate.getTranslation('profile');
  String explore = GetTranslate.getTranslation('explore');
  String name = GetTranslate.getTranslation('name');

  print(profile); // 输出 "Profile"
  print(explore); // 输出 "Explore"
  print(name);    // 输出 "Name"
}

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

1 回复

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


当然,以下是一个关于如何使用 best_flutter_localization 插件进行 Flutter 应用本地化的代码案例。这个插件能够帮助你更轻松地管理和切换应用的语言环境。

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

dependencies:
  flutter:
    sdk: flutter
  best_flutter_localization: ^x.y.z  # 请将 x.y.z 替换为当前最新版本号

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

接下来,设置你的项目以支持本地化。你需要创建一个 assets 文件夹并在其中创建一个 locales 文件夹。在 locales 文件夹中,为每个支持的语言创建一个 JSON 文件,例如 en.jsonzh.json

assets/locales/en.json

{
  "welcome_message": "Welcome",
  "goodbye_message": "Goodbye"
}

assets/locales/zh.json

{
  "welcome_message": "欢迎",
  "goodbye_message": "再见"
}

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

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

接下来,配置你的应用以使用 best_flutter_localization。创建一个 localization.dart 文件来设置本地化委托和代理:

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

class Localization {
  static final Localization _instance = Localization._();

  static Localization get instance => _instance;

  final Map<String, Map<String, String>> _localizedValues = {
    'en': {
      // 你可以在这里手动添加键值对,但通常你会从 JSON 文件中加载它们
    },
    'zh': {
      // 同上
    },
  };

  Localization._();

  String translate(String key, {required BuildContext context}) {
    final Locale locale = Localizations.localeOf(context);
    return _localizedValues[locale.languageCode]![key] ?? key;
  }
}

class MyLocalizationsDelegate extends LocalizationsDelegate<Localization> {
  const MyLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) {
    return ['en', 'zh'].contains(locale.languageCode);
  }

  @override
  Future<Localization> load(Locale locale) async {
    Localization localizations = Localization.instance;

    // 动态加载 JSON 文件中的本地化值(可选,但推荐)
    String jsonKey = locale.languageCode;
    String jsonString = await rootBundle.loadString('assets/locales/$jsonKey.json');
    Map<String, String> jsonMap = jsonDecode(jsonString);

    localizations._localizedValues[jsonKey] = jsonMap;

    return localizations;
  }

  @override
  bool shouldReload(MyLocalizationsDelegate oldDelegate) {
    return false;
  }
}

现在,在你的 main.dart 文件中设置 MaterialApp 以使用你的本地化委托:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Localization Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      localizationsDelegates: [
        MyLocalizationsDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', ''),
        Locale('zh', ''),
      ],
      locale: Locale('en'), // 默认语言
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  void changeLanguage(Locale newLocale) {
    setState(() {
      Localizations.overrideLocaleOf(context, newLocale);
    });
  }

  @override
  Widget build(BuildContext context) {
    final Localization localization = Localizations.of<Localization>(context)!;

    return Scaffold(
      appBar: AppBar(
        title: Text(localization.translate('welcome_message', context: context)),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(localization.translate('welcome_message', context: context)),
            ElevatedButton(
              onPressed: () => changeLanguage(Locale('zh')),
              child: Text('切换到中文'),
            ),
            ElevatedButton(
              onPressed: () => changeLanguage(Locale('en')),
              child: Text('切换到英文'),
            ),
            Text(localization.translate('goodbye_message', context: context)),
          ],
        ),
      ),
    );
  }
}

这个示例展示了如何使用 best_flutter_localization 插件进行基本的本地化设置,并提供了动态切换语言的功能。请根据你的实际需求进行调整和扩展。

回到顶部