当前位置: 首页 > news >正文

flutter实现语言的国际化

目录

前言

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

1.安装Getx

2.创建国际化的文件

3.使用国际化字符串

4.配置GetMaterialApp

5.更改语言

6.系统语言

​编辑

7.原生工程配置

1.iOS工程配

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

2.创建String File文件

2.android配置

8.本博客实例demo

二.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要国际化的字符串以键值对的方式保存在字典中。我们要自定义自己的国际化字符串,先创建一个自定义类文件。

import 'package:get/get.dart';class Messages extends Translations {@overrideMap<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

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: flutterflutter_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});@overrideWidget 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在这里。

相关文章:

flutter实现语言的国际化

目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 ​编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程&#xff0c;在Project的info里面添加语言 2.创建String File文件 2.andr…...

服务端正常启动了,但是客户端请求不到

服务端正常启动了&#xff0c;但是客户端请求不到有哪些原因?如何排查? 如果客户端请求的接口没有响应&#xff0c;排查的方式&#xff1a; 检查接口IP地址是否正确&#xff0c;ping一下接口地址。 检查被测接口端口号是否正确&#xff0c;可以在本机Telnet接口的IP和端口号…...

鸿蒙开发 -本地数据库操作

// 1导入模块 import relationalStore from @ohos.data.relationalStore;export class AthUserDbManager{//2.获取RdbStore实例,要注意的是,此处的getContext(this)用于获取应用上下文:getcreatDbtable(dbname:string){//配置数据库信息:const STORE_CONFIG :relationalStor…...

主机安全-进程、命令攻击与检测

目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机&#xff08;不含容器&#xff09;上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…...

FPGA FIR fdatool filter designer MATLAB

位数问题 fdatool 先确定输入信号的位宽&#xff0c;比如17位在fdatool中&#xff0c;选set quantization parameters 选input/output 设置input word length 为17bit(not confirmed) fir compiler implementation 注意&#xff1a; 当设置输入位宽为16位时&#xff0c;ip核…...

水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)

水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 目录 水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 &#xff08;1&#x…...

Windows 点云生成二维栅格图 [附C++完整代码实现]

点云压缩-2D栅格图 一、点云压缩(二维栅格图)二、算法流程三、代码实现四、结果可视化一、点云压缩(二维栅格图) 点云压缩:点云是海量点的集合,其数据量通常非常庞大。直接存储这些未经压缩的点云数据会消耗大量的存储空间,特别是在处理大规模的点云数据时,这个问题变得…...

SpringBoot结合ip2region实现博客评论显示IP属地

你好呀&#xff0c;我是小邹。 在现代的Web应用中&#xff0c;特别是博客和论坛类网站&#xff0c;为用户提供地理定位服务&#xff08;如显示用户所在地理位置&#xff09;可以极大地增强用户体验。本文将详细探讨如何使用Java和相关技术栈来实现在博客评论中显示用户的地址信…...

设计模式使用场景实现示例及优缺点(行为型模式——策略模式)

在遥远的王国里&#xff0c;有三个重要的角色&#xff1a;国王策略模式、他的皇家顾问算法家族&#xff0c;以及年轻的骑士接口。国王策略模式统治着整个王国&#xff0c;他的职责是确保每一个编程问题都能找到最合适的解决方案。 有一天&#xff0c;王国遇到了一场危机。编程王…...

ReactRouter v6升级的步骤

React Router v6 引入了一个 Routes 组件&#xff0c;它有点像 Switch &#xff0c;但功能要强大得多。与 Switch 相比&#xff0c; Routes 的主要优势在于&#xff1a; <Routes> 中的所有 <Route> 和 <Link> 都是相对的。这导致在 <Route path> 和 &…...

【JVM实战篇】内存调优:内存问题诊断+案例实战

文章目录 诊断内存快照在内存溢出时生成内存快照MAT分析内存快照MAT内存泄漏检测的原理支配树介绍如何在不内存溢出情况下生成堆内存快照&#xff1f;MAT查看支配树MAT如何根据支配树发现内存泄漏 运行程序的内存快照导出和分析快照**大文件的处理** 案例实战案例1&#xff1a;…...

专业条码二维码扫描设备和手机二维码扫描软件的区别?

条码二维码技术已广泛应用于我们的日常生活中&#xff0c;从超市结账到公交出行&#xff0c;再到各类活动的入场验证&#xff0c;条码二维码的便捷性不言而喻&#xff0c;而在条码二维码的扫描识别读取过程中&#xff0c;专业扫描读取设备和手机二维码扫描软件成为了两大主要工…...

基于嵌入式Linux的高性能车载娱乐系统设计与实现 —— 融合Qt、FFmpeg和CAN总线技术

随着汽车智能化的发展&#xff0c;车载娱乐系统已成为现代汽车的标配。本文介绍了一个基于Linux的车载娱乐系统的设计与实现过程。该系统集成了音视频娱乐、导航、车辆信息显示等功能&#xff0c;旨在提供安全、便捷、丰富的驾驶体验。 1. 项目概述 随着汽车智能化的发展&…...

探索IP形象设计:快速掌握设计要点

随着市场竞争的加剧&#xff0c;越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中&#xff0c;知识产权形象设计是非常重要的方面。在智能和互联网的趋势下&#xff0c;未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台&#xff0c;…...

泛微Ecology8明细表对主表赋值

文章目录 [toc]1.需求及效果1.1 需求1.2 效果2.思路与实现3.结语 1.需求及效果 1.1 需求 在明细表中的项目经理&#xff0c;可以将值赋值给主表中的项目经理来作为审批人员 1.2 效果 在申请人保存或者提交后将明细表中的人名赋值给主表中对应的值2.思路与实现 在通过js测…...

opencv—常用函数学习_“干货“_5

目录 十五、图像分割 简单阈值分割 (threshold) 自适应阈值分割 (adaptiveThreshold) 颜色范围分割 (inRange) 分水岭算法 (watershed) 泛洪填充 (floodFill) GrabCut算法 (grabCut) 距离变换 (distanceTransform) 最大稳定极值区域检测 (MSER) 均值漂移滤波 (pyrMean…...

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)

JAVA零基础学习1&#xff08;CMD、JDK、环境变量、变量和键盘键入、IDEA&#xff09; CMD常见命令配置环境变量JDK的下载和安装变量变量的声明和初始化声明变量初始化变量 变量的类型变量的作用域变量命名规则示例代码 键盘键入使用 Scanner 类读取输入步骤示例代码 常用方法处…...

Redis的安装配置及IDEA中使用

目录 一、安装redis&#xff0c;配置redis.conf 1.安装gcc 2.将redis的压缩包放到指定位置解压 [如下面放在 /opt 目录下] 3.编译安装 4.配置redis.conf文件 5.开机自启 二、解决虚拟机本地可以连接redis但是主机不能连接redis 1.虚拟机网络适配器网络连接设置为桥接模式…...

ubuntu 物理内存爆炸而不使用虚拟内存的问题

ubuntu 物理内存不足时有时候会不去使用虚拟内存&#xff0c;让虚拟内存空闲&#xff0c;而直接关闭占用内存的进程&#xff0c;如果在进行模型测试或训练时&#xff0c;就会导致训练或测试进程被杀死。 1. 修改 swappiness&#xff1a; cat /proc/sys/vm/swappiness sudo sysc…...

Python实现音频均衡和降噪

使用librosa库来读取音频文件&#xff0c;音频处理是一个复杂过程&#xff0c;这里只是简单的进行降噪和均衡。 import librosa import soundfile as sf def improve_audio_quality(input_file, output_file): # 读取音频文件 audio, sample_rate librosa.load(input_…...

【独家首发】DeepSeek官方未公开的DRY检查白皮书(v2.3.1内测版):覆盖LoRA适配器、MoE路由层、Tokenizer预处理3大高危模块

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek DRY原则检查的演进脉络与核心定义 DRY&#xff08;Don’t Repeat Yourself&#xff09;作为软件工程基石性原则&#xff0c;在DeepSeek大模型推理与代码生成场景中已从静态语法检查逐步演化为语义感…...

Taotoken API Key管理功能实现团队权限与访问控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API Key管理功能实现团队权限与访问控制 在团队协作开发或项目管理中&#xff0c;如何安全、可控地分发大模型调用资源是…...

3分钟解决Cursor试用限制:设备标识重置完整指南

3分钟解决Cursor试用限制&#xff1a;设备标识重置完整指南 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial request limit. / Too …...

手把手教你用wget和迅雷搞定nuScenes数据集下载(附完整性校验命令)

高效获取nuScenes数据集的两种技术方案与完整性验证指南 在自动驾驶与计算机视觉研究领域&#xff0c;nuScenes数据集因其丰富的传感器数据和精细的标注体系已成为行业基准测试的重要资源。但对于大多数研究者而言&#xff0c;获取这个总容量超过550GB的数据集却面临着网络不稳…...

CS188 Note3 学习笔记

更好的阅读体验 Informed Search(启发式搜索) 原文解释 If we have some notion of the direction in which we should focus our search, we can significantly improve performance and “hone in” on a goal much more quickly. This is exactly the focus of informed …...

四旋翼无人机深度强化学习控制框架与实战优化

1. 四旋翼无人机端到端深度强化学习框架解析四旋翼无人机的自主飞行控制一直是机器人学领域的核心挑战。传统PID控制虽然稳定可靠&#xff0c;但在复杂动态环境中表现受限。深度强化学习&#xff08;DRL&#xff09;通过模拟环境交互实现智能决策&#xff0c;为无人机控制带来了…...

Faster-Whisper + WebSocket实战:给你的Unity游戏或应用加上实时语音交互

Faster-Whisper WebSocket全链路实战&#xff1a;构建Unity实时语音交互系统 在游戏和交互式应用开发中&#xff0c;语音交互正成为提升用户体验的关键功能。想象一下玩家通过语音指令控制角色、VR环境中自然对话交互&#xff0c;或是教育软件中实时语音反馈的场景——这些都需…...

为OpenClaw工作流配置Taotoken作为统一模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为OpenClaw工作流配置Taotoken作为统一模型供应商 如果你正在使用OpenClaw构建复杂的Agent工作流&#xff0c;管理多个Agent的模型…...

Windows管道通信踩坑记:客户端异常退出后,服务端如何优雅重建命名管道实例(附C++代码)

Windows管道通信实战&#xff1a;客户端异常退出时的服务端健壮性设计 命名管道&#xff08;Named Pipe&#xff09;是Windows平台进程间通信&#xff08;IPC&#xff09;的核心机制之一&#xff0c;但在实际工程中&#xff0c;客户端异常退出的场景常常成为稳定性短板。当客户…...

钠金属负极自校正技术:复合纸基底设计原理与工程实践

1. 项目概述&#xff1a;从“火中取栗”到“驯服烈马”的钠金属负极革新在电池研发领域&#xff0c;金属钠负极一直被视为下一代高能量密度电池的“圣杯”&#xff0c;其理论比容量高达1166 mAh/g&#xff0c;是石墨负极的近三倍&#xff0c;且钠资源储量丰富、成本低廉。然而&…...