v3.00:
1.跨平台兼容性
2.代码重构和优化

v2.21:
1.针对ainiee5的”代码救星“做出优化：
现在可以通过在翻译文件目录内创建一个名为"trans.json"的文件，来导入其中的翻译
文件的格式和mtool格式相同为{"原文":"译文"}(但原文必须和本工具提取的原文相同）
使用方法就是根据“代码救星”的检查结果，把译文修正，然后按照mtool的文件格式复制到新建的"trans.json"文件中后，注入翻译即可
2.一键注入时增加译文替换功能，
在翻译文件目录内创建"replace.json"后，按照{"原本的译文":"替换后的译文"}格式添加

******************************************************************************
@neavo  调整 - 对部分设置页面进行了重构
******************************************************************************

v2.20:
1.在黑名单地址和code里的文本，现在虽然还是会读取，但不会被导出翻译了，节省token节省时间
v2.19:
1.修了个影响严重的小bug（？

2.增加脚本版自动换行功能，感谢@Morph大佬
将配置项'line_length'改为-1即可。如果本功能报错，可自行将“自动换行.js"复制到js\plugins文件夹内
并修改js\plugins.js文件，在[下面一行添加
{"name":"自动换行","status":true,"description":"auto linefeed","parameters":{}},

脚本不一定适配所有游戏，如果遇到报错，需要手动删除上面那一行和js\plugins文件夹的js文件

v2.18:
1.鉴于特殊文本格式众多，靠我一个人补全显然不可能。所以把战斗日志功能整合了一下，现在叫他特殊文本提取应该更合适
简而言之，现在可以自定义特殊文本和对应的提取规则了

为此新增config配置项：sptext，设置的格式为
‘特殊文本对应的code’:{‘特殊文本中一定有的文本,如果不限定文本，就用”空“字代替’:'提取对应的正则表达式，用中文句号替换英文单引号'}
（用自定义表达式提取后还会再筛选一遍仅含中日字符的文本）

该功能适用于某一种code，只有某一类特定文本可以翻译的情况，比如说code355，我们想翻译的文本可能长这样：
"BattleManager._logWindow.push('addText', 'ネトネトした手で敏感な胸を執拗に揉みしだかれてしまった…！');"
上面这种文本我们只希望翻译日文部分
那么就可以在sptext内添加
'355':{'addText':'[^a-zA-z0-9(),。]+'}
来提取code=355，并且文本内存在addText这一字段的文本，后面的正则表达式表示的是提取所有连续的非英文字母数字以及"(",")",",","'"的文本

为什么要设置“存在addText”这个判断条件，是因为code355的文本可能不止这一种，还有可能存在其他完全不能翻译的文本，加这个判断条件就是为了防止提取到这些文本。

在sptext中的code，即使在readcode中也会被readcode无视，但是如果在sumcode和blackcode中，sptext的设置会不生效。
v2.17:
1.search函数增加正则表达式开关，以前一直默认是开，但这样会导致有些内容搜不到
2.新增code356的一种战斗日志，只翻译含有addLog的文本。但是code356敏感内容比较多，我也不敢说翻了会不会有什么bug，所以默认关闭，需要的话手动加进readcode中
注意sumcode和blackcode中不能有356
v2.16:
1.新增对Scenario.json文件的支持，该文件如果存在，一般位于Scenario文件夹下，并且包含几乎全部游戏文本。
如要翻译这个文件，需要在读取游戏前把它复制到data文件夹内
注：样本量不是很足，不保证对所有Scenario.json都适配
v2.15:
1.改进DNoteB函数，现在总长度只会统计中日字符。防止形如"<Filter:日差し,tiltshift,TileAndCharsAndParallax>"的文本出现
2.dnb函数新加一个参数，现在可以提交自定义文件名列表。默认为false，不使用自定义列表。
本功能是为应对文件名是经过js文件替换后才写到json文件的情况。需要从js文件中找到替换字典，从中提取出出现在json中的文件名作为参数传递给dnb函数。
提取需要一定门槛，所以一键式操作不会支持本功能
3.自动换行现在在计算字数时，不会计算英文和数字了。标点符号补加了省略号和《》【】
4.给dnb函数加了个原文类型判断，现在即使原文是空的也不会报错了（懒得去排查为什么会有空原文了，一般是英文游戏）
v2.14:
1.战斗日志新增一种code（655），和code355同样，只在只在readcode中有655时生效，且不能出现在sumcode和blackcode中。两个code可以单独设置
v2.13：
1.togame一键式操作中添加自动换行，当'line_length'不为0时启用
2.新增ApplyConfig函数用于更新config
3.注入游戏时，如果存在未翻译行，现在会单独导出一个“未翻译行.xlsx”。防止有大批量导入失败的未翻译行而不知道。（目前没遇到过，但参考t++，不是没可能）
4.如果游戏标题没有翻译，现在会先应用原文，再添加水印了
v2.12:
1.修复了当json文件位于data文件夹的子文件夹时，注入会失败的bug
2.修复了上述情况下，不能正常创建子文件夹的bug
v2.11
1.把csv字段长度改成了2^30，pandas的长度取消限制。应该不会出字段超出限制的提示了
2.以变量形式保存版本号
3.完善文本求和功能，修复了导致字段超出长度的原因
v2.10：
1.注入游戏前，会自动检测有没有未翻译行了，如有，则应用原文
2.增加翻译t++红标文本行，code=355行（战斗日志）的能力，只有在code=355，而且文本中存在addText的时候才会应用。需要正则提取，在config中添加正则表达式配置项rule
只在readcode中有355时生效，且不能出现在sumcode和blackcode中

该类文本示例
"BattleManager._logWindow.push('addText', 'ネトネトした手で敏感な胸を執拗に揉みしだかれてしまった…！');"


v2.01：
1.读取到的文件为空时，不保存该空文件，否则ainiee会不断重复翻译一个空文本.同时取消了注入游戏时，存在ProgramData中不存在的文件名时的报错提示
2.search函数，现在当搜索字符串时空字符串时，会返回对应列为空的数据。
v2.0:
1.修改读取文本逻辑，增加文本求和功能。
作用简单来说，就是文本提取更像t++了，会把同一个对话框内的文本放在一起导出，应该能提高翻译质量。
不过还是不能完美导入到t++内，因为本工具会忽略没有日文字符的文本行，所以会比t++少一部分文本，如果少的这部分是文本求和的第一行，就会匹配不上
2.地址改为从data文件夹的下一级开始记录，而不是从json文件名开始。能够防止data文件夹下不同子文件夹中存在同名json文件时导致的报错。同步修改导出xlsx和csv文件的方式，也会创建相同的子文件夹了
3.修改DNoteB函数，新增配置项note_percent。对note中每一对<>单独判断，<到:字符串长度占整个字符串长度的比例不足note_percent时，将整个note替换回原文。
同时dnb不再处理note文本。两项改动的最终结果，应该是涉及到图鉴的note行，只有显示文本的译文被保留；不涉及图鉴的note行，全部替换回原文。
改动后，应该能彻底解决note问题，不再需要向黑名单地址中添加note
v1.9.1:
1.修复了Update函数忘记和1.8版本同步更新，使用会报错的问题。顺便修正错别字
v1.9:
1.修复了读取非日语游戏时，会读到空字符串的问题
2.修复了非日语游戏无法正常获取name.json的问题
v1.8:
1.FromGame函数变更，保存工程文件路径（save_path）和待翻译文件路径（data_path）分开。csv文件夹更名为翻译工程文件，删除config.json
2.修复togame函数错别字
3.提取到的名字移动到待翻译文件路径内
4.搜索去掉了花里胡哨的按*分割字符串的方法，直接用正则表达式。配套地更新了config中的设置。对应修改__IfBlackDir函数，改用正则匹配黑名单
5.重新启用自动标记黑名单功能，对地址和code全黑的行，会标记Black标签，并自动应用原文
v1.7：
1.完善日文字符的正则表达式范围（添加4个特殊符号ー々〆〤）
2.完善自动换行中中文的正则表达式（增加特殊字符和中文标点）
3.修复了DisplayBySearch函数，搜索结果为空时输出全部ProgramData的问题。并补足了其他bysearch函数，搜索结果为空时的提示
1.6：
1.新增功能：当readcode为空列表时，读取全部文本
2.OutputBySearch新增一项默认参数full，默认为False，此时导出的xlsx文件只有原文和译文列；为True时，包含全部列
3.删掉导出名字时总会有的一行"":""
4.现在注入游戏时，黑名单文件也会被复制到输出文件夹内了
5.拆分成两个py文件，jt++是主程序
1.5：
1.发现并解决了一些游戏，System.json\gameTitle是空时，程序会报错的问题
2.写xlsx文件也改用openpyxl，因为pandas的写入有字符长度限制，openpyxl的限制更长（虽然解决了长度问题，但经常导致地址保存不完整，原因未知，不能解决，所以有了更新4）
3.Name.json改为自动导入到name文件夹，如果不存在，会自动创建这个文件夹。获取到的名字会自动按照非中日字符拆分开
4.保存工程改用csv，以\uFFFC（ ）为分隔符。导出翻译文件还是xlsx，但是只导出原文和译文列。1.4版本以前的翻译工程不再支持读取，需要重新从游戏读取
# 不建议用excel打开工程的csv文件，可能会出现问题
5.config.yaml默认配置修改：
（1）读取名字时的默认排除项（'NameWithout'）增加技能名（'Skills*name'），道具名（'Items*name'）和状态名（'States*name'）
（2）黑名单地址（'BlackDir'）新增'SrcEventIdOrName'。
# 在翻译ACT游戏时，建议把'note'也加入黑名单地址，否则大概率无法攻击或攻击没有效果
6.根据搜索结果导出json文件函数，json文件从{原文：原文}变为{原文：译文}
7.一键式操作新增游戏版本更新功能，此时'translation_path'为旧版翻译文件的路径。运行逻辑是，把旧版翻译文件导入到新版游戏，导出后ainiee会自动忽略已翻译的文本
8.一键式操作新增导出翻译文件（xlsx）功能。
1.4:
1.utf8读取json文件失败时，尝试用chardet自适应编码，chardet返回none的情况下，默认用ansi打开。还打不开就跳过
2.读取json文件和xlsx文件时，不会读取名字含有xlsx和json的文件夹了
3.去掉了Jr_Tpp类外的，一个没什么用的函数
4.添加了是否为日文游戏的开关，config配置项ja，翻译非日文游戏时，必须将其设为0（没有经过测试，不能保证像日文游戏一样不出bug）
1.3:
1.对data文件夹更加精准地定位，从判断'data'是否在路径内变为判断'\\data\\'，从而防止读取到不必要的json文件，以及防止注入时创建路径报错
2.修复了一个不为人知的bug（__CheckNAN函数）
3.改用openpyxl读xlsx，因为用pandas会把'=xxx'的字符串当成excel的错误函数表达式，读成NaN，而且解决不了
4.主函数整体用try包裹，现在出bug也不会闪退了。并且一键读取游戏后，可以直接进入注入的操作界面，不再需要读取翻译工程
5.地址不再按照英文逗号分隔，而是按照“☆↑↓”分割（谁能想到他还真有在地址里加逗号的）
1.2：
1.修复了搜索反选的逻辑错误，以前搜索反选"A*B"时，会返回不含A的数据中，不含B的数据；现在会返回，不含A且不含B的数据。并且现在搜索结果会返回没有经过大小写转化的原数据
2.现在保存会自动在保存路径下创建一个data文件夹，xlsx放在data里，config放在外面
3.增加新功能DNoteB，自动处理note类问题。
4.运行主体函数