Browse Source

update(i18n): 更新翻译,修正代码生成器脚本

gavin.chen 2 years ago
parent
commit
6473dfd231
8 changed files with 107 additions and 4 deletions
  1. 3 3
      README.md
  2. 2 1
      assets/en_US.json
  3. 1 0
      assets/zh_CN.json
  4. 5 0
      lib/modules/remedical.dart
  5. 0 0
      tools/Excel2JSON.md
  6. 0 0
      tools/JSON2Excel.md
  7. 96 0
      tools/generator.md
  8. BIN
      tools/generator.py

+ 3 - 3
README.md

@@ -122,7 +122,7 @@ class TestModule {
 ## 启动
 
 - 当前目录下运行
-- `python .\tools\generator.py`
+- `python .\tools\generator.md`
 - 脚本会读取 `assets` 内 `json` 文件重新生成一遍 `modules` 文件夹
 - ❗ 注意:如果新增模块,需要手动更新 `class_mapping.json`,并且 `key_book.dart` 等文件不会自动更新,需要手动修改
 
@@ -131,13 +131,13 @@ class TestModule {
 ## 将 json 导出为 excel
 
 - 当前目录下运行
-- `python .\tools\JSON2Excel.py`
+- `python .\tools\JSON2Excel.md`
 - 脚本会读取 `assets` 内 `json` 文件将翻译的中英文值写入当前目录下的 `output.xlsx`,如果该文件已存在则会覆盖
 
 ## 将 excel 导入到 json
 
 - 当前目录下运行
-- `python .\tools\Excel2JSON.py`
+- `python .\tools\Excel2JSON.md`
 - ❗ 使用前需要修改 改脚本文件 下的文件路径 `INPUT_PATH` ❗ 
 - ❗ 注意:运行该脚本需要针对不同格式的 excel 做对应的修改
 - 此脚本通过翻译词条的 key 值匹配 excel 中出现的翻译值,直接更新到 json 文件中

+ 2 - 1
assets/en_US.json

@@ -677,7 +677,8 @@
     "transferOutAgency": "Referred from",
     "patientDisplayName": "Patient Name",
     "transferredOut": "Referred",
-    "refused": "Refuse",
+    "refuse": "Refuse",
+    "refused": "Refused",
     "myPatient": "My patients",
     "referPatient": "Transfer Treatment",
     "patientName": "Name",

+ 1 - 0
assets/zh_CN.json

@@ -677,6 +677,7 @@
     "transferOutAgency": "转出机构",
     "patientDisplayName": "病人姓名",
     "transferredOut": "已转出",
+    "refuse": "拒绝",
     "refused": "已拒绝",
     "myPatient": "我的病人",
     "referPatient": "转入病人",

+ 5 - 0
lib/modules/remedical.dart

@@ -41,6 +41,7 @@ class RemedicalModule extends ModuleBase {
     required this.transferOutAgency,
     required this.patientDisplayName,
     required this.transferredOut,
+    required this.refuse,
     required this.refused,
     required this.myPatient,
     required this.referPatient,
@@ -307,6 +308,7 @@ class RemedicalModule extends ModuleBase {
       transferOutAgency: map.pick("transferOutAgency"),
       patientDisplayName: map.pick("patientDisplayName"),
       transferredOut: map.pick("transferredOut"),
+      refuse: map.pick("refuse"),
       refused: map.pick("refused"),
       myPatient: map.pick("myPatient"),
       referPatient: map.pick("referPatient"),
@@ -646,6 +648,9 @@ class RemedicalModule extends ModuleBase {
   /// 已转出
   final FTrStr transferredOut;
 
+  /// 拒绝
+  final FTrStr refuse;
+
   /// 已拒绝
   final FTrStr refused;
 

+ 0 - 0
tools/Excel2JSON.py → tools/Excel2JSON.md


+ 0 - 0
tools/JSON2Excel.py → tools/JSON2Excel.md


+ 96 - 0
tools/generator.md

@@ -0,0 +1,96 @@
+# -*- coding:utf-8 -*-
+# modeules 代码生成器 v1.2 [测试中]
+import json
+import os
+import sys
+
+code_template = '''import 'package:fis_i18n/types.dart';
+/// {模块中文名}模块
+class {className} extends ModuleBase {{
+    {className}._({{
+    {required_fields}
+  }});
+
+  static const ModuleName = "{ModuleName}";
+
+  factory {className}(Map<String, dynamic> map) {{
+    return {className}._(
+      {map_fields}
+    );
+  }}
+{define_fields}
+  @override
+  getProp(String propName) {{
+    // TODO: implement getProp
+    throw UnimplementedError();
+  }}
+}}
+'''
+
+
+def read_json(file_name):
+    with open(file_name, 'r', encoding='utf-8') as f:
+        data = json.load(f)
+    return data
+
+
+def write_dart(file_name, data):  # 生成Dart文件
+    with open(file_name, 'w', encoding='utf-8') as f:
+        f.write(data)
+
+
+def mkdir(path):  # 生成空文件夹
+    if not os.path.exists(path):
+        os.makedirs(path)
+    else:
+        # 清空文件夹
+        for file in os.listdir(path):
+            file_path = os.path.join(path, file)
+            if os.path.isfile(file_path):
+                os.remove(file_path)
+            else:
+                shutil.rmtree(file_path)
+
+
+GENERATOR_PATH = './lib/modules/'
+
+mapping_file = read_json('assets\class_mapping.json')
+trans_file = read_json('assets\zh_CN.json')
+mkdir(GENERATOR_PATH)
+success_files = []
+missing_files = []
+trans_num = 0
+for key in trans_file:
+    if key != 'locale':
+        if key in mapping_file:
+            trans_list = trans_file[key]
+            required_content = ''.join(
+                ['required this.{i},\n'.format(i=i) for i in trans_list])
+            map_content = ''.join(
+                ['{i}: map.pick(\"{i}\"),\n'.format(i=i) for i in trans_list])
+            define_content = ''.join(
+                ['/// {annotate}\nfinal FTrStr {i};\n'.format(i=i, annotate=trans_list[i]) for i in trans_list])
+            code_content = code_template.format(
+                模块中文名=mapping_file[key]["module_name_cn"],
+                className=mapping_file[key]["class_name"],
+                ModuleName=mapping_file[key]["module_name"],
+                required_fields=required_content,
+                map_fields=map_content,
+                define_fields=define_content)
+            write_dart('{path}{file_name}.dart'.format(
+                path=GENERATOR_PATH,
+                file_name=mapping_file[key]["file_name"]), code_content)
+            success_files.append(mapping_file[key]["file_name"])
+            print("\n✅ ", key, '模块 —— 生成完毕,总计', len(trans_list), "条翻译")
+            trans_num += len(trans_list)
+        else:
+            print("\n❌ ", key, "模块没有对应映射文件 ")
+            missing_files.append(key)
+print("\n生成 index.dart ...")
+index_content = ''.join(
+    ['export \'{i}.dart\';\n'.format(i=i) for i in success_files])
+write_dart('{path}index.dart'.format(path=GENERATOR_PATH), index_content)
+print("\n代码格式化...")
+os.system("flutter format {path}".format(path=GENERATOR_PATH))
+print("\n输出目录:", GENERATOR_PATH, "\n✅ 成功", len(
+    success_files), "个模块,共", str(trans_num), "条翻译\n❌ 失败", len(missing_files), "个模块")

BIN
tools/generator.py