|
@@ -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), "个模块")
|