Flutter国际化之自动化写入资源文件

上一篇文章自动化查找中文变量,已经将所需要进行国际化的变量进行标记,且写入到excel中,只需要将excel中的内容进行翻译即可。此文将进行后续操作,将翻译过后的数据重新写入到flutter_intl库的资源文件中。

遍历上文生成的excel文件,将对应的内容写入到arb即可,直接上代码。如果需要生成多种国际化资源文件,修改少部分逻辑即可。

arb文件支持json的语法,注意点如下:

1.如果是最后一条资源内容,则最后不能输入逗号,否则文件内容不满足json格式。

2.如果是需要显示的字符串中显示占位符,则需要在excel中就写好。

void main(List<String> arguments) {
  final projectPath = arguments.isEmpty ? projectName : arguments.first;
  Directory current = Directory.current;
  var path = current.path;

  ///项目的目录
  String targetPath;

  ///自动检查当前文件向上
  while (path != "/" && !path.split("/").last.contains(projectPath)) {
    current = current.parent;
    path = current.path;
  }
  if (path.isEmpty) {
    print('执行的dart文件必须属于项目中');
    return;
  }
  targetPath = path;
  print('目标项目路径: $targetPath');
  var file = File("$targetPath/assets/intl.xlsx");
  if (file.existsSync()) {
    var bytes = file.readAsBytesSync();
    var excel = Excel.decodeBytes(bytes);
    var sheet = excel.sheets['国际化对照表'];

    var enArb = File("$targetPath/lib/l10n/intl_en.arb");

    var zhArb = File("$targetPath/lib/l10n/intl_zh.arb");

    enArb.writeAsStringSync("{\n", flush: false);

    zhArb.writeAsStringSync("{\n", flush: false);

    int writeRows = 0;

    ///循环获取数据
    for (int row = 1; row <= (sheet?.maxRows ?? 0) + 1; row++) {
      ///从A、B、C的第一行开始,往下遍历,同时获取到定义的国际化名、中文、英文
      var variable = sheet?.cell(CellIndex.indexByString("A$row")).value;
      var chineseVar = sheet?.cell(CellIndex.indexByString("B$row")).value;
      var englishVar = sheet?.cell(CellIndex.indexByString("C$row")).value;

      ///同时判定下一行是否存在数据
      int nextRow = row + 1;

      var nextVariable =
          sheet?.cell(CellIndex.indexByString("A$nextRow")).value;
      var nextChineseVar =
          sheet?.cell(CellIndex.indexByString("B$nextRow")).value;
      var nextEnglishVar =
          sheet?.cell(CellIndex.indexByString("C$nextRow")).value;

      ///判定一下一行是否有数据
      bool nextDataIsNull = nextVariable == null ||
          nextChineseVar == null ||
          nextEnglishVar == null;

      ///如果下一行没有了数据,则生成的内容里,不能最后加上逗号,否则json格式会解析错误
      if (nextDataIsNull) {
        enArb.writeAsStringSync('\t"$variable": "$englishVar"\n',
            mode: FileMode.append);
        zhArb.writeAsStringSync('\t"$variable": "$chineseVar"\n',
            mode: FileMode.append);
      } else {
        enArb.writeAsStringSync('\t"$variable": "$englishVar",\n',
            mode: FileMode.append);
        zhArb.writeAsStringSync('\t"$variable": "$chineseVar",\n',
            mode: FileMode.append);
      }

      writeRows++;

      ///如果下一行中,某一列没有数据,则暂停遍历
      if (nextVariable == null ||
          nextChineseVar == null ||
          nextEnglishVar == null) {
        break;
      }
    }

    enArb.writeAsStringSync("}", flush: true, mode: FileMode.append);

    zhArb.writeAsStringSync("}", flush: false, mode: FileMode.append);

    print('操作完成,总计写入$writeRows条国际化字符串');
  } else {
    print("读取的数据源intl.xlsx文件不存在");
  }
}

通过该文可以根据excel的固定格式,自动写入到arb文件,减少人工消耗,也可以大大减少错误率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flutter自动化测试是指使用特定的工具和技术来自动执行和验证Flutter应用程序的功能和性能。其中一个常用的工具是Flutter Driver,它是Flutter框架提供的一个用于编写和运行自动化测试的库和命令行工具。通过Flutter Driver,开发人员可以编写测试脚本并运行这些脚本,以模拟用户在应用程序中的行为,并验证应用程序的正确性。 在使用Flutter Driver进行自动化测试之前,需要在项目的依赖中添加flutter_driver库。可以通过在pubspec.yaml文件中添加以下配置来引入Flutter Driver依赖: ``` dependencies: flutter_driver: sdk: flutter ``` 然后,编写自动化测试脚本,在命令行运行`flutter drive --target=test_driver/app.dart`命令即可开始自动化测试。运行这个命令后,控制台会输出一些信息,包括测试的进度和结果。如果所有的测试都通过了,控制台会输出"All tests passed!"的提示,表示测试成功。 通过Flutter自动化测试,开发人员可以更高效地验证应用的功能,减少手动测试的工作量,并确保应用在不同环境和情况下的稳定性和正确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Flutter 自动化测试-集成测试篇](https://blog.csdn.net/weixin_53519100/article/details/114545910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Flutter应用进行自动化测试](https://blog.csdn.net/AI_Green/article/details/119913119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WxSkyqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值