- 实现步骤:
- 创建本地化资源文件:
- 在
lib
目录下创建l10n
目录。
- 创建不同语言的
.arb
文件,例如app_en.arb
(英语)、app_zh.arb
(中文)等。在.arb
文件中定义应用中会用到的文本,如:
{
"welcomeMessage": "Welcome",
"@welcomeMessage": {
"description": "The message shown to welcome the user"
}
}
- 配置国际化:
- 在
pubspec.yaml
文件中添加flutter_localizations
依赖:
dependencies:
flutter_localizations:
sdk: flutter
- 在`main.dart`的`MaterialApp`或`CupertinoApp`中配置`localizationsDelegates`、`supportedLocales`和`localeResolutionCallback`。例如:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
localizationsDelegates: const [
GlobalCupertinoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: const [
Locale('en', ''),
Locale('zh', ''),
],
localeResolutionCallback: (deviceLocale, supportedLocales) {
for (var locale in supportedLocales) {
if (locale.languageCode == deviceLocale?.languageCode) {
return deviceLocale;
}
}
return supportedLocales.first;
},
home: HomePage(),
);
}
}
- 提取和使用本地化字符串:
- 使用
flutter gen-l10n
命令生成本地化代码。这会在lib
目录下生成l10n
文件夹,里面包含自动生成的AppLocalizations
类。
- 在Cupertino组件中,通过
AppLocalizations.of(context)
获取本地化字符串。例如在CupertinoButton
中:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
child: Center(
child: CupertinoButton(
onPressed: () {},
child: Text(AppLocalizations.of(context)!.welcomeMessage),
),
),
);
}
}
- 关键代码点:
.arb
文件的正确编写:注意每个字符串都应该有对应的描述,方便翻译人员理解含义。并且字符串的命名要清晰,符合应用内的语义。
localizationsDelegates
配置:要包含GlobalCupertinoLocalizations.delegate
,因为它负责Cupertino组件的本地化。同时也要包含GlobalMaterialLocalizations.delegate
和GlobalWidgetsLocalizations.delegate
,以确保整个应用的本地化支持。
flutter gen - l10n
命令:正确执行该命令以生成有效的本地化代码,该代码为在应用中方便地获取本地化字符串提供了基础。
AppLocalizations.of(context)
的使用:在需要显示本地化文本的Cupertino组件中,正确使用该方法获取本地化字符串,确保文本根据用户当前设置的语言显示正确内容。