flutter实现语言的国际化

简介: 【7月更文挑战第16天】

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

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

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

1.安装Getx
在pubspec.yaml文件中配置Get:

dependencies:
get:

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

import 'package:get/get.dart';

class Messages extends Translations {
@override
Map> get keys => {
'zh_CN': {
'hello': '你好 世界',
},
'de_DE': {
'hello': 'Hallo Welt',
},
'en_US': {
'hello': 'Hello World',
}
};
}
3.使用国际化字符串
使用字符串的时候非常简单,在字符串后面添加.tr后缀即可。

Text('title'.tr);

4.配置GetMaterialApp
return GetMaterialApp(
translations: Messages(), // 你的翻译
locale: Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
fallbackLocale: Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
);
5.更改语言
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中增加不同语言的切换。

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在这里。
相关文章
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
295 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
|
2月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
126 58
|
6月前
|
前端开发 C++ 容器
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
|
3月前
|
JSON 自然语言处理 Android开发
Flutter本地化(国际化)之App名称
Flutter本地化(国际化)之App名称
59 1
|
5月前
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
|
6月前
|
开发框架 Dart Java
Flutter的核心:Dart语言基础——语法与特性深度解析
【4月更文挑战第26天】Flutter框架背后的Dart语言,以其简洁的语法和独特特性深受开发者喜爱。本文深入解析Dart的语法与特性,如类型推导、动态静态类型系统、统一的类接口、访问权限控制以及并发编程支持。了解并掌握Dart,能助开发者更高效地利用Flutter构建高性能移动应用。
|
6月前
|
自然语言处理 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
【4月更文挑战第30天】Flutter支持国际化与本地化,借助`Intl`包和`Localizations`类,帮助开发者实现多语言应用。`Intl`提供日期、时间格式化,而`Localizations`管理不同语言环境的资源。在`pubspec.yaml`添加`intl`依赖,创建本地化资源文件并定义`LocalizationsDelegate`。通过`Localizations.of()`获取本地化资源,实现应用适应不同语言环境。
205 0
【Flutter前端技术开发专栏】Flutter中的国际化与本地化支持
|
6月前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
64 0
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
|
6月前
|
存储 自然语言处理 API
Flutter应用的国际化支持:实现多语言环境的优雅策略
【4月更文挑战第26天】Flutter提供强大的国际化(i18n)和本地化(l10n)支持,使开发者能轻松实现应用多语言特性。通过定义`.arb`文件来管理字符串资源,使用`LocalizationsDelegate`加载资源,设置应用语言环境,以及在UI中使用`S.of(context).someString`访问字符串。进阶技巧包括字符串格式化、复数形式、双向文本和Unicode支持。充分测试确保所有语言正确显示。随着全球化需求增长,Flutter的国际化支持成为应用开发关键。
|
6月前
|
存储 容器
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
263 0