flutter实现语言的国际化

目录

前言

一、GetX实现国际化(推荐)

1.安装Getx

2.创建国际化的文件

3.使用国际化字符串

4.配置GetMaterialApp

5.更改语言

6.系统语言

​编辑

7.原生工程配置

1.iOS工程配

1.打开iOS工程,在Project的info里面添加语言

[2.创建String File文件](#2.创建String File文件)

2.android配置

8.本博客实例demo

[二.Flutter Intl配置国际化](#二.Flutter Intl配置国际化)

1.安装intl插件。

2.配置flutter_localizations

3.使用插件初始化工程

4.添加需要支持的语言

5.国际化字符串

6.配置中英文切换

7.使用字符串

8.完整实例代码


前言

今天特意准备了这篇实现国际化的文章,和大家一起,用最简单快速的方式实现 Flutter 国际化。

我们从一个最简单的工程开始,看一下如何是实现Flutter应用程序的国际化。

一、GetX实现国际化(推荐)

新建一个Flutter工程,使用GetX实现国际化的具体步骤如下:

1.安装Getx

在pubspec.yaml文件中配置Get:

dependencies:

get:

2.创建国际化的文件

Flutter要国际化的字符串以键值对的方式保存在字典中。我们要自定义自己的国际化字符串,先创建一个自定义类文件。

Dart 复制代码
import 'package:get/get.dart';

class Messages extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
    'zh_CN': {
      'hello': '你好 世界',
    },
    'de_DE': {
      'hello': 'Hallo Welt',
    },
    'en_US': {
      'hello': 'Hello World',
    }
  };
}

3.使用国际化字符串

使用字符串的时候非常简单,在字符串后面添加.tr后缀即可。

Text('title'.tr);

4.配置GetMaterialApp

Dart 复制代码
return GetMaterialApp(
    translations: Messages(), // 你的翻译
    locale: Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
    fallbackLocale: Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
);

5.更改语言

Dart 复制代码
var locale = Locale('en', 'US');
Get.updateLocale(locale);

6.系统语言

要读取系统语言,可以使用window.locale.

import 'dart:ui' as ui;

return GetMaterialApp(
locale: ui.window.locale,
);

图1.Flutter国际化

7.原生工程配置

其实经过上面的步骤之后,app内部已经可以实现国际化了。但是如果不在iOS原生中配置iOS国际化支持,在设置中是不会显示语言首选项等设置的。

图2.设置中显示app的语言设置

1.iOS工程配

1.打开iOS工程,在Project的info里面添加语言

图3.添加国际化需要增加的语言

2.创建String File文件

创建StringFile文件用来存储所有语言的文本。

New-File-String File创建存储的文件。

图4.配置完成的iOS工程

这里创建完整之后,在设置里面就可以看到首选语言了。搞定。

2.android配置

打开android 工程,配置对国际化语言的支持,具体的步骤就不写了,不懂的可以自行百度。

8.本博客实例demo

本博客使用的demos在这里

二.Flutter Intl配置国际化

这种方式稍微优点复杂,有时间的话也可以尝试下。

1.安装intl插件。

图5.安装intl插件

2.配置flutter_localizations

pobspec.yaml文件中添加flutter_locations:

复制代码
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

3.使用插件初始化工程

图6.初始化工程

初始化完成之后的项目结构目录如下:

图7.intl初始化项目

lib 文件夹中多了两个文件夹 generated 和 i10n。我们需要关注的是 l10n。

我们看到i10n目录下有一个intl.en.arb就是需要国际化的英文的配置文件。

4.添加需要支持的语言

默认情况下,intl支持英文,我们增加对中文的支持。图8.增加需要支持的语言

在下面的弹窗中输入"zh-CN",增加对中文的支持。

5.国际化字符串

在intl_zh_CN.arb中,增加英文的国际化字符串

复制代码
{
  "test" : "Test"
}

在intl_en.arb中,增加中文的国际化字符串

复制代码
{
  "test" : "测试"
}

6.配置中英文切换

在MaterialApp中增加不同语言的切换。

Dart 复制代码
class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
        // 切换中英文
        locale: const Locale('zh', ''),
        // locale: const Locale('en', ''),
        localizationsDelegates: const [
          S.delegate,
          GlobalMaterialLocalizations.delegate,
          GlobalCupertinoLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate
        ],
        supportedLocales: [
          const Locale('zh', ''),
          ...S.delegate.supportedLocales
        ],
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

7.使用字符串

S.of(context).test

8.完整实例代码

当然我们如果想要程序记录下上次的选择,还可以继续封装一下,使用shared_preferences保存上次的记录,以便下一次加载。

完整的demo这里

相关推荐
jcLee959 小时前
Flutter/Dart:使用日志模块Logger Easier
flutter·log4j·dart·logger
tmacfrank9 小时前
Flutter 异步编程简述
flutter
tmacfrank10 小时前
Flutter 基础知识总结
flutter
叫我菜菜就好10 小时前
【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理
前端·网络·flutter
AiFlutter14 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
m0_748247802 天前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
迷雾漫步者2 天前
Flutter组件————PageView
flutter·跨平台·dart
迷雾漫步者2 天前
Flutter组件————FloatingActionButton
前端·flutter·dart
coder_pig2 天前
📝小记:Ubuntu 部署 Jenkins 打包 Flutter APK
flutter·ubuntu·jenkins
捡芝麻丢西瓜2 天前
flutter自学笔记5- dart 编码规范
flutter·dart