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

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

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


结束语

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

相关推荐
ujainu39 分钟前
让笔记触手可及:为 Flutter + OpenHarmony 鸿蒙记事本添加实时搜索(二)
笔记·flutter·openharmony
一只大侠的侠39 分钟前
Flutter开源鸿蒙跨平台训练营 Day 13从零开发注册页面
flutter·华为·harmonyos
一只大侠的侠1 小时前
Flutter开源鸿蒙跨平台训练营 Day19自定义 useFormik 实现高性能表单处理
flutter·开源·harmonyos
恋猫de小郭2 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
一只大侠的侠7 小时前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
renke336410 小时前
Flutter for OpenHarmony:色彩捕手——基于HSL色轮与感知色差的交互式色觉训练系统
flutter
子春一12 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
铅笔侠_小龙虾13 小时前
Flutter 实战: 计算器
开发语言·javascript·flutter
微祎_14 小时前
Flutter for OpenHarmony:构建一个 Flutter 重力弹球游戏,2D 物理引擎、手势交互与关卡设计的工程实现
flutter·游戏·交互
一起养小猫15 小时前
Flutter for OpenHarmony 实战_魔方应用UI设计与交互优化
flutter·ui·交互·harmonyos