前言

不造你有没有发现—>写程序,学语言,学框架,怎么又绕不过这个国际化,毕竟现在叫地球村嘛。不过flutter现在的国际话不叫i8n了,叫l10n,至于为什么,暂时也没有求关注这个问题。

学习配置

中文官网

先安装插件 Flutter Intl

  1. vscode安装

  2. Android studio安装

项目配置

1
2
3
4
5
6
dependencies:
flutter:
sdk: flutter
+ flutter_localizations:
+ sdk: flutter

生成国际化文件

  1. vscode生成国际化文件

    • 查看—>命令面板—> Flutter Intl: Initialize

    • 之后会在lib目录下生成如下目录和文件(文件只有英文的)

    • -pubspec.yaml文件最下方会出现,这个是控制是否自动生成和动态修改国际化文件的
    1
    2
    flutter_intl:
    enabled: true
    • 添加国际化文件——> lib/l10n/intl_xxx.arb
  2. Android studio 生成国际化文件

    • Tools->flutter Intl->Initialize for the project

    • 生成的文件和vscode是一样的

    • 添加国际化文件——>Tools->flutter Intl->Add Locale

设置国际化语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/l10n.dart';


@override
Widget build(BuildContext context) {
return MaterialApp(
l
ocalizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
supportedLocales: S.delegate.supportedLocales,
localeListResolutionCallback: (locales, supportedLocales) {
print('当前系统语言环境$locales');
return;
},

home: MyStatefulWidget(),
);
}
}

使用国际化

  • 在需要配置国际化的地方调用S.of(context).key即可.
  • 没有context 时可以使用S.current.key
1
2
3
4
5
6
7
8
9
10
class _DrawerState extends State<MyStatefulWidget> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(S.current.title),//这里使用的是国际化
),
drawer: _drawer,
);
}

运行效果


如果能够帮助到你,是小编最大的荣幸

当然 有 不好的地方 请大家帮忙指出 学习永无止境

小编一直认为 人外有人 天外有天 一起学习 共同进步

让我们共同加油吧!!!