satan53x / SExtractor

从GalGame脚本提取和导入文本
GNU General Public License v3.0
225 stars 15 forks source link

请求更改CSV的导出格式 #52

Closed allrobot closed 7 months ago

allrobot commented 7 months ago

用pylivemaker导入csv,但是并没有导入

https://github.com/pmrowla/pylivemaker/issues/134#issuecomment-2009554611

询问作者后,说是CSV格式有问题,应该用""双引号表示单元格的内容,虽然excel能正常打开,但有些第三方库识别不了不带"双引号的CSV格式,为了避免麻烦,建议导出为csv格式文件应添加双引号"

satan53x commented 7 months ago

image 确定是这个问题?你这个comment里发的00000001.csv不是加了引号的吗? 内容和你在comment里边粘贴的不一样呢?

allrobot commented 7 months ago

你这个comment里发的00000001.csv不是加了引号的吗? 内容和你在comment里边粘贴的不一样呢?

编辑,是我搞错了,打开excel编辑器保存后没有自动添加双引号,重新检查了下,SE导出来的少部分单元格加双引号,其它单元格没有双引号

pylivemaker作者要求翻译项要加双引号,只有少数几个有双引号,剩下的单元格(翻译项和原文)全是没有双引号的

如果更改csv引擎添加双引号是不合理的,希望能增加一个csv引擎,注入时自带双引号

satan53x commented 7 months ago

translated file: 00000001.csv

不是啊,我的意思是SE导入默认就是会有双引号的。 你在excel编辑之前直接用文本编辑器查看,应该是有双引号的。 而且你发的这个个00000001.csv只要有换行都是有双引号的,你直接用你发的那个导入,虽然有不是cp932文本的问题,但是没有引号问题。

satan53x commented 7 months ago

原文csv image

译文json image

SE导出的译文csv image

satan53x commented 7 months ago

这都是有双引号的啊? 如果是用excel编辑保存需要自行修改excel的csv导出设置,它会重写csv格式。(单元格格式有的也会影响输出) 尽量在json里就编辑好,就不需要通过excel编辑了。或者用EmEditor编辑csv,他不会更改默认格式。

allrobot commented 7 months ago

SE导出的译文csv image

图里的5,6,7,13行号没有双引号,只有2,8带了双引号

satan53x commented 7 months ago

图里的5,6,7,13行号没有双引号,只有2,8带了双引号

没有问题啊,只有带换行的才需要双引号。

原文csv image

你看pylivemaker导出的原文csv这些行数也没有双引号。符合csv标准。

allrobot commented 7 months ago

你看pylivemaker导出的原文csv这些行数也没有双引号。符合csv标准。

原来是这样,抱歉,是我对csv标准不太了解

allrobot commented 7 months ago

刚才重新导入到csv,8、9行都是换行的,原文是有双引号的,翻译项没有双引号, chrome_MkAoKHv6xV

Trans_Project.zip

分隔符为⚔,正则如图所示,目录为Trans_Project

8,9行 99,100行 103,104行 等等,都是翻译项有换行,但没有双引号的

allrobot commented 7 months ago

Translator++导出的csv,不管有没有换行都带双引号,但SE导出来后只要没有换行就删掉双引号了……

satan53x commented 7 months ago

8,9行 99,100行 103,104行 等等,都是翻译项有换行,但没有双引号的

image 你上传的文件中,第9行的译文并不存在换行。 双引号都是按单元格算的,没有的就不需要双引号。 pylivemaker作者说换行有问题是因为你在issue里粘贴的那个内容有问题。

satan53x commented 7 months ago

这个CSV_Livemaker就是给pylivemaker用的,我和群友已经用过多次了,pylivemaker可以正确读取SE导出的csv。 没有双引号缺失或者pylivemaker解析不了文件的问题。 没有用过excel编辑,但是用emeditor编辑的文件,pylivemaker都可以正常导入。

satan53x commented 7 months ago

非纯文本模式下,SE是使用第三方库pandas模块导出csv,内部处理也是使用pandas的DataFrame数据结构,所以导出的文件在格式上是没有问题的。

allrobot commented 7 months ago

image

看错了,编辑,是我的设置有什么差错吗😂如何正确设置能导入到livemaker呢

你上传的文件中,第9行的译文并不存在换行。 双引号都是按单元格算的,没有的就不需要双引号。 pylivemaker作者说换行有问题是因为你在issue里粘贴的那个内容有问题。

黏贴的内容\r\n换成\\n,如果这也算是有问题的话

allrobot commented 7 months ago

8,9行 99,100行 103,104行 等等,都是翻译项有换行,但没有双引号的 你上传的文件中,第9行的译文并不存在换行。

只注意到原文有换行,没注意译文没有换行符,抱歉

satan53x commented 7 months ago

不是你excel编辑的问题吗?你SE导出的csv直接导入也会报引号问题? 如果只报cp932错误那就不是引号问题,是因为pylivemaker默认导入是用cp932也就是shift-jis编码。 要么你改pylivemaker的模块代码用gbk导入。 要么用JIS替换,教程:https://github.com/CyanidEEEEE/Livemaker-chinese-tl?tab=readme-ov-file#%E7%AC%AC%E4%B8%89%E6%AD%A5

allrobot commented 7 months ago

十分抱歉,查了半天bug,发现是字体问题,应该是吧,忘了昨天是怎么注入结果提示:

  Translated 0 lines
  Failed to translate 0 lines
  Ignored 336 untranslated lines

刚才执行lmlsb insertcsv --encoding=utf-8-sig 00000001.lsb 00000001.csv,报错了一大堆字体错误

2024-03-21 16:05:33.638 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:5> '进' is not a valid CP932 character.
2024-03-21 16:05:33.638 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:6> '间' is not a valid CP932 character.
2024-03-21 16:05:33.638 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:7> '啊' is not a valid CP932 character.
2024-03-21 16:05:33.639 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:8> '么' is not a valid CP932 character.
2024-03-21 16:05:33.639 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:9> '啊' is not a valid CP932 character.
2024-03-21 16:05:33.639 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:10> '细' is not a valid CP932 character.
2024-03-21 16:05:33.640 | WARNING  | livemaker.lsb.lmscript:replace_text_blocks:594 - Failed to translate text block <pylm:text:00000001.lsb:127:11> '习' is not a valid CP932 character.
  Translated 2 lines
  Failed to translate 323 lines
  Ignored 0 untranslated lines
Backing up original LSB.
Wrote new LSB.

含有错误字体的翻译项没有注入到lsb文件,所以游戏显示的是原文

你的工具没有任何问题

说个和主贴没有关系的话,https://github.com/CyanidEEEEE/Livemaker-chinese-tl提供的字体我已经安装了,但cmd还是字体报错,我去试试把注册表的字体文件删掉再安装一遍看看

satan53x commented 7 months ago

不是,他这个字体是给游戏用的,游戏调用的时候才会读取字体。 pylivemaker导入的时候不是字体,是编码只允许合法的cp932。 需要先使用JIS替换字典,把简体中文替换为合法cp932编码。原理如下:

1. 译文json:说
2. 替换字典:"说": "説"
3. 导入csv:説
4. ttf/otf字体中,"説"对应的字形被指向了"说"。

所以游戏在读取字体后,合法的cp932编码显示简体的

allrobot commented 7 months ago

第一次汉化livemaker这个引擎的游戏,网上只找到https://github.com/CyanidEEEEE/Livemaker-chinese-tl 这个还算可以的教程,但讲的不够详细(对小白来说)

关于JIS替换字典我研究研究,想办法让pylivemaker把中文字体正确导入到lsb文件中

satan53x commented 7 months ago

SE有JIS替换功能,但是替换字典和教程不一样,不能直接用它这个字体。 这个字典和VNT图形界面https://github.com/cx2333-gt/GalTransl_DumpInjector的一致。 对应字体在tools/font文件夹下。