【Dart 教程系列第 50 篇】在 Flutter 项目的国际化多语言中,如何根据翻译提供的多语言文档表格,快速生成不同语言的内容

news2024/12/21 22:16:37

这是【Dart 教程系列第 50 篇】,如果觉得有用的话,欢迎关注专栏。

博文当前所用 Flutter SDK:3.22.1、Dart SDK:3.4.1

文章目录

      • 一:问题描述
      • 二:解决方案
      • 三:完整代码

一:问题描述

在 Flutter 项目中做过多语言的会知道,一门语言对应着一个 dart 文件,如下图所示,从上到下分别代表着英语、俄语、简体中文、繁体中文。

在这里插入图片描述

不同语言中对应语言对象的 key 是一样的,value 就是自己语言的值,如下图英语语言所示

在这里插入图片描述

如下图简体中文语言所示

在这里插入图片描述

假设目前多语言只有这 4 个,后来新增了两个语言字段,这个时候你在每个语言各复制了两条内容,然后再从多语言表格中一一对应着 dart多语言文件中的 key 开始复制粘贴,很快你就完成了,这似乎没有什么问题。

但此时如果新增了 100 个呢?总不能还继续复制、粘贴的操作吧,而且这只是有 4 门语言的情况,如果有 10 门或者更多的语言,那工作量更是成倍的增加了,显然这是不可取的方法。

当出现大量重复的操作时,此时让程序去做无疑是最合适的(所以说懒惰使人进步,哈哈)

二:解决方案

假设现在我们只有简体中文、繁体中文、英语、俄语 4 门语言,

第一步:

首先把翻译给的多语言表格整理成如下图表格所示的内容。

在这里插入图片描述

为方便显示,这里我只列举出了 4 个。

第一行是标题,将会对应着后文语言对象列表 List<Map<String, String>> languages 中 map 对象的 key。

第二步:

复制表格中有内容的部分(不是全表格复制)到一个可以 Excel 转 Json 的网站,如下图所示

在这里插入图片描述

第三步:

复制转换后的 Json 内容到下文的 languages 列表中,如下图所示

在这里插入图片描述

下面定义一个语言类型的枚举,方便处理数据和显示,如下图所示

在这里插入图片描述

第四步:

接着写一个方法,通过循环为语言对象列表进行赋值即可,如下图所示

在这里插入图片描述

执行此方法后的控制台输出结果如下图所示

在这里插入图片描述

可以看到控制台上输出了不同的语言内容。后面如果翻译再增加内容,你也只需要把翻译提供的表格内容复制到你整理好格式的表格中,执行第一步到第四步,然后替换对应的整个语言文件即可。

当然,你也可以自己进行 IO 操作,直接把生成的内容生成新的语言文件,覆盖指定路径下的语言文件,有了前面的过程,你想怎么玩都可以。

三:完整代码

完整代码如下所示

import 'package:flutter/material.dart';

// ------------------------------------------------------
// author:AllenSu
// date  :2024/9/8 17:45 
// usage :快速打印多语言
// ------------------------------------------------------

void main() {
	// 在 main 方法中执行 _printLanguage
  _printLanguage();
}

/// 这里替换为你自己的多语言
final List<Map<String, String>> languages = [
  {"key":"confirm_binding","zh":"确定绑定","tw":"確定綁定","en":"Confirm binding","ru":"Подтвердить привязку"},
  {"key":"close_page","zh":"关闭页面","tw":"關閉頁面","en":"Close page","ru":"Закрыть страницу"},
  {"key":"do_refresh","zh":"刷新","tw":"重新整理","en":"Refresh","ru":"Обновить"},
  {"key":"do_delete","zh":"删除","tw":"刪除","en":"Delete","ru":"Удалить"}
];

void _printLanguage() {
  for (LanguageType type in LanguageType.values) {
    final String tip = '${type.code}  ${type.desc}';
    debugPrint("- - - - - - - - - - - - - - - - - - - - - $tip - - - - - - - - - - - - - - - - - - - - -");
    Map<String, String> result = {};
    languages.forEach((e) {
      result[e['key']!] = '${e[type.code]}';
    });
    result.forEach((key, value) {
      print('\'$key\' : \'$value\',');
    });
  }
}

/// 语言类型
enum LanguageType {
  zh('zh', '简体中文'),
  tw('tw', '繁体中文'),
  en('en', '英语'),
  ru('ru', '俄语');

  /// 语言代码
  final String code;

  /// 语言名称描述
  final String desc;

  const LanguageType(this.code, this.desc);
}

ok,关于在 Flutter 项目的国际化多语言中,如何根据翻译提供的多语言文档表格,快速生成不同语言的内容便介绍到这里。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学会分析问题,画出分析图,解释问题过程,找出规律 ;整数数组分为左右2个部分,左边位奇数右边偶数

// 整数数组左边是奇数右边是偶数.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include<stdio.h> void swap(int& a,int& b) {int tempa;ab;btemp; } int main(int argc, char* argv[]) {int a[7]{1,2,3,4,5,…

使用jenkins 打包前端私服代码失败的问题

问题现象&#xff1a; jinekins 流水线在yarn 编译前端私服依赖包的时候&#xff0c;报错&#xff0c;提示 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 【emm。。。之前的构建都是好好的&#xff0c;也不知道前端大哥啥时候去封装的前端代码&am…

【每日刷题】Day115

【每日刷题】Day115 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 089. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 090. 打家劫舍 II - 力扣&…

阿里云服务器镜像,有大用处

大家好&#xff0c;我是小悟 有时候阿里云旧服务器快到期了&#xff0c;想把项目、数据、软件挪到新服务器上&#xff0c;如果全部重新搭建的话&#xff0c;那无疑是耗时又费力。有了镜像迁移&#xff0c;就方便了许多。 新旧服务器的类型要一致&#xff0c;比如都是ECS服务器…

Matlab程序练习

Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序&#xff1a; 主文件&#xff1a;main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…

使用Azure+C#+visual studio开发图像目标检测系统

在这篇文章里面&#xff0c;我们讲解使用AzureC#visual studio在Azure上做图像的目标检测系统。 笔者是头一次接触C#。之前以Python Java和Scala为主。感觉C#.Net是一种挺好用的开发系统。C#和Java非常像。会一个学另一个很快。 首先&#xff0c;目标检测是个什么东西&#x…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.执行以下命令启动靶场环境并在浏览器访问 cd spring/CVE-2022-22963docker-compose up -ddocker ps 2.反弹shell 构造payload 3.页面刷新抓包&#xff0c;修改内容 POST /functionRouter HTTP/1.1 Host: 172.16.1.89:8080 Accept-Encoding: gzip, deflate Accept: */* Acc…

任务栏颜色怎么改?快速实现Windows系统任务栏透明,全面指南和操作实践!

任务栏是电脑操作系统的重要组成部分&#xff0c;电脑会自动为任务栏选择颜色&#xff0c;一般分为浅色&#xff08;白色&#xff09;、深色&#xff08;黑色&#xff09;。如果想要设置成自己喜欢的颜色&#xff0c;也是可以更改的&#xff0c;那么任务栏颜色怎么改呢&#xf…

实时图像处理的加速器:《基于FPGA的数字图像处理原理及应用》(可下载)

图像处理技术已成为我们生活中不可或缺的一部分。从智能手机的摄像头到卫星图像分析&#xff0c;从医疗影像到安全监控&#xff0c;图像处理技术的应用无处不在。随着技术的进步&#xff0c;我们对图像处理的速度和质量要求也越来越高。在这一背景下&#xff0c;现场可编程门阵…

CDGA|大模型数据治理的案例与实践深入剖析

随着人工智能技术的飞速发展&#xff0c;大模型在数据治理领域的应用日益广泛&#xff0c;为企业带来了前所未有的机遇与挑战。本文将通过几个具体案例&#xff0c;深入剖析大模型在数据治理中的实践应用&#xff0c;探讨其带来的变革与影响。 大模型在数据治理中的核心优势 大…

大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式

在数字化转型的浪潮中&#xff0c;深圳市龙华区再次引领行业创新&#xff0c;携手华为云成功举办“龙华工业软件云工程应用创新中心启动仪式暨鸿蒙产业园揭牌仪式”&#xff0c;本次盛会已于8月26日圆满落幕。活动现场&#xff0c;来自全国各地的行业精英、企业领袖及专家学者汇…

资料分析(2)

C B 增长量不变就是1002020 上面是利滚利:按照20%当利息 本题:涨跌幅度的意思就是增长率&#xff0c;本题是按照增长率不变的情况下进行计算D B 7551400X>1.2*100000 B B B 总体增量部分增量之和 先进行计算固定通信业务收入的增长量移动通信业务实现收入的增长量 增长量现期…

11大排序的原理讲解和Python源码剖析

排序算法 【谁教你这么剪的 | 11大排序的原理讲解和Python源码剖析】 https://www.bilibili.com/video/BV1Zs4y1X7mN/?share_sourcecopy_web&vd_sourceed4a51d52f6e5c9a2cb7def6fa64ad6a 稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b…

如何实现数字孪生?看这篇就够了

数字孪生&#xff08;Digital Twin&#xff09;是一种集成了物理世界和数字世界的先进概念&#xff0c;通过高精度的模拟来反映现实世界的实体或系统。它利用物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;、云计算等先进技术&#xff0c;实现…

应对AI挑战的职业发展与培训策略

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;各行各业正经历着前所未有的变革。为了在这场变革中保持竞争力并实现个人职业发展&#xff0c;职场人士需要积极应对AI带来的挑战&#xff0c;通过制定有效的职业发展与培训策略来不断提升自我。以下是几个关…

大数据决策分析平台建设方案(可编辑的56页PPT)

引言&#xff1a;在当今信息爆炸的时代&#xff0c;大数据已成为企业决策制定、业务优化与市场洞察的重要驱动力。为了充分挖掘大数据的潜在价值&#xff0c;提升决策效率与精准度&#xff0c;构建一套高效、灵活、可扩展的大数据决策分析平台显得尤为重要。通过大数据分析平台…

佰朔资本:沪指跌0.23%,金融板块集体上扬,半导体等板块下挫

6日早盘&#xff0c;沪指盘中轰动回落&#xff0c;深证成指、创业板指弱势下探&#xff0c;上证50指数逆市上扬&#xff0c;场内超4400股飘绿。 到午间收盘&#xff0c;沪指跌0.23%报2782点&#xff0c;深证成指跌1.01%&#xff0c;创业板指跌1.29%&#xff0c;上证50指数微涨…

不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信

不小心删除了一条短信&#xff0c;或者丢失了所有短信&#xff1f;希望还未破灭&#xff0c;下面介绍如何在 iPhone 上查找和恢复已删除的短信。 短信通常都是非正式和无关紧要的&#xff0c;但短信中可能包含非常重要的信息。因此&#xff0c;如果您删除了一些短信以清理 iPh…

LeetCode第414场周赛(第一题)

目录 一&#xff1a;题目&#xff1a;3280. 将日期转换为二进制表示 一&#xff1a;题目&#xff1a;3280. 将日期转换为二进制表示 给你一个字符串 date&#xff0c;它的格式为 yyyy-mm-dd&#xff0c;表示一个公历日期。 date 可以重写为二进制表示&#xff0c;只需要将年…

idea创建一个spring项目,并编写一个初级spring项目实战(全网最详细)

1.创建spring项目 创建后界面显示 2.再pom.xml文件中添加Spring框架依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.10</version> </dependency> 注意&…