Flutter插件Get(7):实现语言的国际化
一、前言
除了 Flutter Intl 的方式实现国际化(参考我以前的博客:Flutter进阶(2):国际化开发 - fengMisaka - 博客园),还可以使用 GetX 实现国际化(推荐)。
先看下效果图:
二、GetX 实现国际化(推荐)
新建一个 Flutter 工程,使用 GetX 实现国际化的具体步骤如下:
2.1 安装Getx
在pubspec.yaml
文件中配置 Get:
dependencies:
get: ^4.6.5
2.2 创建国际化的文件
Flutter 要国际化的字符串以键值对的方式保存在字典中。我们要自定义自己的国际化字符串,先创建一个自定义类文件,这里命名为Translation.dart
:
import 'package:get/get.dart';
// (2)自定义自己的国际化字符串
class Translation extends Translations {
@override
Map<String, Map<String, String>> get keys => {
// 1-配置中文简体
'zh_CN': {
'中国': '中国',
},
// 2-配置中文繁体
'zh_HK': {
'中国': '中國',
},
// 3-配置英文
'en_US': {
'中国': 'China',
}
};
}
2.3 使用国际化字符串
使用字符串的时候非常简单,在字符串后面添加.tr
后缀即可。
Text(
'中国'.tr, // (3)在字符串后面添加.tr后缀即可
),
2.4 配置GetMaterialApp
在pubspec.yaml
文件中配置 Get:
return GetMaterialApp(
// ...
// (4)配置GetMaterialApp
translations: Translation(), // 你的翻译
locale: const Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
fallbackLocale: const Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
// ...
);
2.5 更改语言
使用字符串的时候非常简单,在字符串后面添加.tr
后缀即可。
var locale = Locale('en', 'US');
Get.updateLocale(locale);
三、完整示例代码
main.dart:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'Translation.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
debugShowCheckedModeBanner: false,
// (4)配置GetMaterialApp
translations: Translation(), // 你的翻译类
locale: const Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
fallbackLocale: const Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'中国'.tr, // (3)在字符串后面添加.tr后缀即可
style: const TextStyle(
color: Colors.red, fontSize: 50, fontWeight: FontWeight.w700),
),
changeButton(const Locale('zh', 'CN'), '简体'),
changeButton(const Locale('zh', 'HK'), '繁体'),
changeButton(const Locale('en', 'US'), '英文'),
],
),
),
);
}
Widget changeButton(Locale newLocale, String text) {
return ElevatedButton(
onPressed: () {
// (5)更改语言
Get.updateLocale(newLocale);
},
child: Text(text),
);
}
}
分类:
Flutter / Flutter插件
, Flutter
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2018-11-15 [C陷阱和缺陷] 第2章 语法“陷阱”