locale_switcher
用于切换应用程序区域设置的小部件。
关于
这不是一个本地化包,它只是一些有用的扩展小部件
本地化系统功能的,例如:intl,
easy_localization,等等……
注意:此包本身已经很小,但如果您仍想进一步减小其大小,
您可以使用 locale_switcher_dev 包,
该包允许您控制包含哪些标志(或不包含)
以及它依赖于哪些包(或不依赖)。
功能
-
LocaleManager 小部件
- 可选:将最后选择的区域设置加载/存储到
SharedPreferences中, - 更新应用区域设置(它会监听
notifier并重建MaterialApp), - 观察系统区域设置的变化,
- 可选:将最后选择的区域设置加载/存储到
-
LocaleSwitcher -
一个用于切换区域设置的小部件- 显示区域设置列表和使用系统区域设置的特殊选项,
- 构造函数 LocaleSwitcher.segmentedButton,
- 构造函数 LocaleSwitcher.menu,
- 构造函数 LocaleSwitcher.custom,
- 构造函数 LocaleSwitcher.iconButton - 按钮/指示器,用于打开弹出窗口选择区域设置,
-
其他一些辅助函数
- LangIconWithToolTip
类,带有附加构造函数 forIconBuilder, - showSelectLocaleDialog.
- Locale 的扩展,返回标志 - Locale.flag
- LangIconWithToolTip
-
可以通过 locale_switcher_dev 生成
包,在这种情况下,您将控制- 包含哪些标志(或不包含),
- 它依赖于哪些包(或不依赖)。
用法
- 用
MaterialApp或CupertinoApp包装
LocaleManager
(以intl包为例)
@override
Widget build(BuildContext context, WidgetRef ref) {
return LocaleManager(
child: MaterialApp(
locale: LocaleSwitcher.localeBestMatch,
supportedLocales: AppLocalizations.supportedLocales,
localizationsDelegates: AppLocalizations.localizationsDelegates,
//...
- 添加 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 包
使用 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