locale_switcher

用于切换应用程序区域设置的小部件。

codecov

关于

这不是一个本地化包,它只是一些有用的扩展小部件
本地化系统功能的,例如:intl
easy_localization,等等……

注意:此包本身已经很小,但如果您仍想进一步减小其大小,
您可以使用 locale_switcher_dev 包,
该包允许您控制包含哪些标志(或不包含)
以及它依赖于哪些包(或不依赖)。

功能

用法

  1. MaterialAppCupertinoApp包装
    LocaleManager
    (以intl包为例)
  @override
Widget build(BuildContext context, WidgetRef ref) {
  return LocaleManager(
      child: MaterialApp(
          locale: LocaleSwitcher.localeBestMatch,
          supportedLocales: AppLocalizations.supportedLocales,
          localizationsDelegates: AppLocalizations.localizationsDelegates,
  //...
  1. 添加 LocaleSwitcher
    小部件到您的应用程序中的任何位置。

故障排除

注意:在使用此包之前,应先设置好本地化,
如果存在问题,请先检查下一节和/或您使用的本地化系统的文档,
然后再报告错误。

对于 intl 包

检查 intl 包是否设置正确,
以下是 pubspec.yaml 的示例设置
l10n.yaml

对于 easy_localization 包

检查 easy_localization 包是否设置正确,
以下是 pubspec.yaml 的示例设置。

注意:如果您使用 locale_switcher_dev
您无需
使用 LocaleSwitcher.setLocaleCallBack

但对于 locale_switcher,这是必需的
setLocaleCallBack: (context) => context.setLocale(LocaleSwitcher.localeBestMatch)

对于 slang 包

检查 slang 包是否设置正确,
以下是 pubspec.yaml 的示例设置。

目前,它在没有: LocaleSwitcher.setLocaleCallBack 的情况下不起作用,
请参阅如何设置它的示例 - 此处

示例

在线示例在此处

使用 intl

使用 easy_localization

  • locale_switcher_dev + easy_localization 示例
    此处(推荐)

  • locale_switcher + easy_localization 示例
    此处

使用 slang

待办事项

  • [ ] 改进矩形标志!
  • [ ] 允许使用表情符号作为标志

常见问题

- 如何更改语言顺序?

语言的显示顺序与它们在 l10n.yaml 中列出的顺序相同,
或通过 LocaleSwitcher.custom 动态设置。
通过 LocaleSwitcher.custom 动态设置。

- 如何更改语言标志?

使用 LocaleManager.reassign
参数,如下所示

LocaleManager(
  reassign: {'en': ['GB', 'English', <Your_icon_optional>]}
  // (first two options are required, third is optional)
  // first option is the code of country which flag you want to use
...
)

- 如何在 MaterialApp(或 CupertinoApp)之外使用本地化?

这是一个有用的示例,尽管它不依赖于此包


import 'package:flutter_gen/gen_l10n/app_localizations.dart';

/// Access localization through locale
extension LocaleWithDelegate on Locale {
  /// Get class with translation strings for this locale.
  AppLocalizations get tr => lookupAppLocalizations(this);
}

Locale("en").tr.example
// or 
LocaleManager.locale.value.tr.example

GitHub

https://github.com/Alexqwesa/locale_switcher