LanguageSwitcher
简介
LanguageSwitcher 组件提供了在您的 Nylo Website 项目中处理语言切换的简便方式。它自动检测 /lang 目录中可用的语言并将其显示给用户。
LanguageSwitcher 的功能:
- 显示
/lang目录中的可用语言 - 用户选择时切换应用语言
- 在应用重启之间持久化选定的语言
- 语言更改时自动更新 UI
注意:如果您的应用尚未本地化,请在使用此组件之前先查看本地化文档了解如何操作。
下拉组件
使用 LanguageSwitcher 最简单的方式是作为应用栏中的下拉菜单:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Settings"),
actions: [
LanguageSwitcher(), // Add to the app bar
],
),
body: Center(
child: Text("Hello World".tr()),
),
);
}
当用户点击下拉菜单时,他们将看到可用语言列表。选择语言后,应用将自动切换并更新 UI。
底部弹窗
您还可以在底部弹窗中显示语言:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: MaterialButton(
child: Text("Change Language"),
onPressed: () {
LanguageSwitcher.showBottomModal(context);
},
),
),
);
}
底部弹窗显示语言列表,当前选定的语言旁边有一个勾选标记。
自定义弹窗高度
LanguageSwitcher.showBottomModal(
context,
height: 300, // Custom height
);
自定义下拉构建器
自定义下拉菜单中每个语言选项的显示方式:
LanguageSwitcher(
dropdownBuilder: (Map<String, dynamic> language) {
return Row(
children: [
Icon(Icons.language),
SizedBox(width: 8),
Text(language['name']), // e.g., "English"
// language['locale'] contains the locale code, e.g., "en"
],
);
},
)
处理语言更改
LanguageSwitcher(
onLanguageChange: (Map<String, dynamic> language) {
print('Language changed to: ${language['name']}');
// Perform additional actions when language changes
},
)
参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
icon |
Widget? |
- | 下拉按钮的自定义图标 |
iconEnabledColor |
Color? |
- | 下拉图标的颜色 |
iconSize |
double |
24 |
下拉图标的大小 |
dropdownBgColor |
Color? |
- | 下拉菜单的背景颜色 |
hint |
Widget? |
- | 未选择语言时的提示组件 |
itemHeight |
double |
kMinInteractiveDimension |
每个下拉项的高度 |
elevation |
int |
8 |
下拉菜单的阴影 |
padding |
EdgeInsetsGeometry? |
- | 下拉菜单的内边距 |
borderRadius |
BorderRadius? |
- | 下拉菜单的边框圆角 |
textStyle |
TextStyle? |
- | 下拉项的文本样式 |
langPath |
String |
'lang' |
资源中语言文件的路径 |
dropdownBuilder |
Function(Map<String, dynamic>)? |
- | 下拉项的自定义构建器 |
dropdownAlignment |
AlignmentGeometry |
AlignmentDirectional.centerStart |
下拉项的对齐方式 |
dropdownOnTap |
Function()? |
- | 下拉项被点击时的回调 |
onTap |
Function()? |
- | 下拉按钮被点击时的回调 |
onLanguageChange |
Function(Map<String, dynamic>)? |
- | 语言更改时的回调 |
静态方法
获取当前语言
获取当前选定的语言:
Map<String, dynamic>? lang = await LanguageSwitcher.currentLanguage();
// Returns: {"en": "English"} or null if not set
存储语言
手动存储语言偏好:
await LanguageSwitcher.storeLanguage(
object: {"fr": "French"},
);
清除语言
移除已存储的语言偏好:
await LanguageSwitcher.clearLanguage();
获取语言数据
从区域代码获取语言信息:
Map<String, String>? langData = LanguageSwitcher.getLanguageData("en");
// Returns: {"en": "English"}
Map<String, String>? langData = LanguageSwitcher.getLanguageData("fr_CA");
// Returns: {"fr_CA": "French (Canada)"}
获取语言列表
获取 /lang 目录中所有可用的语言:
List<Map<String, String>> languages = await LanguageSwitcher.getLanguageList();
// Returns: [{"en": "English"}, {"es": "Spanish"}, ...]
显示底部弹窗
显示语言选择弹窗:
await LanguageSwitcher.showBottomModal(context);
// With custom height
await LanguageSwitcher.showBottomModal(context, height: 400);
支持的区域设置
LanguageSwitcher 组件支持数百个带有人类可读名称的区域代码。部分示例:
| 区域代码 | 语言名称 |
|---|---|
en |
English |
en_US |
English (United States) |
en_GB |
English (United Kingdom) |
es |
Spanish |
fr |
French |
de |
German |
zh |
Chinese |
zh_Hans |
Chinese (Simplified) |
ja |
Japanese |
ko |
Korean |
ar |
Arabic |
hi |
Hindi |
pt |
Portuguese |
ru |
Russian |
完整列表包含大多数语言的区域变体。