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

这是【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 操作,直接把生成的内容生成新的语言文件,覆盖指定路径下的语言文件,有了前面的过程,你想怎么玩都可以。

三:完整代码

完整代码如下所示

csharp 复制代码
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 项目的国际化多语言中,如何根据翻译提供的多语言文档表格,快速生成不同语言的内容便介绍到这里。

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

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


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。
最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

相关推荐
西西学代码3 小时前
Flutter---回调函数
开发语言·javascript·flutter
圣光SG3 小时前
Vue.js 从入门到精通:技术成长之路
flutter
恋猫de小郭12 小时前
Swift 6.3 正式发布支持 Android ,它能在跨平台发挥什么优势?
android·前端·flutter
i-阿松!15 小时前
PCB板子+ flutter前端 + go后端
物联网·flutter·pcb工艺·go1.19
恋猫de小郭16 小时前
Flutter 3.41.6 版本很重要,你大概率需要更新一下
android·前端·flutter
亚历克斯神1 天前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态1 天前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏1 天前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony
左手厨刀右手茼蒿1 天前
Flutter 组件 http_requests 适配鸿蒙 HarmonyOS 实战:极简网络请求,构建边缘端轻量级 RESTful 通讯架构
网络·flutter·http
雷帝木木1 天前
Flutter 三方库 hrk_logging 的鸿蒙化适配指南 - 实现标准化分层日志记录、支持多目的地输出与日志分级过滤
flutter·harmonyos·鸿蒙·openharmony·hrk_logging