debug4 写了: ↑2022-11-21 0:28
这个就有点强迫症了。
不过,似乎有个变通的思路:
把自己编排的 PO,复制并重命名为 POT。
再打开你现在导入官方 POT 后,得到的乱序 PO 混合文件,导入上面的 手工 POT。不知是否可行?
如果单从“排版”的角度是可行的,但这样没办法“更新”呀,这样会把最新的POT又变成我老旧的PO了。
新POT文件里有些条目是有变化的,例如“位于程序的第几行”这个数字就经常在变,有时又或增或减几个条目。
例如:
代码: 全选
——旧的PO文件——
#. :src: scripts/startup/bl_operators/wm.py:3111
#. :src: scripts/startup/bl_operators/wm.py:3142
msgctxt "Operator"
msgid "Release Notes"
msgstr "版本说明"
——新的POT文件——
——数字变了,有时是同一段多了一行或几行。
——注意,在PO和POT文件里相似的翻译(一词多义)会有好几段,如下所示。
#. :src: scripts/startup/bl_operators/wm.py:3136
#. :src: scripts/startup/bl_operators/wm.py:3176
msgctxt "Operator"
msgid "Release Notes"
msgstr ""
#. :src: scripts/startup/bl_operators/wm.py:1070
msgid "Release Notes"
msgstr ""
我也在尝试写个python脚本来更新,目前我己经实现的做法是:
(1)把旧的PO文件使用poedit调用POT文件更新,另存为新的PO文件。
(2)用Python脚本把旧的PO文件和新的PO文件分别存入两个字典。
(3)然后遍历旧字典,查询是否存在于新字典里,
如果存在就照搬写入第三个文件,如果不存在就加一个“有变化”的标记也照搬写入第三个文件。
(4)原本想:我手工修改“有变化”的就行了……
但这样做之后发现,带“有变化”标记的太多了,几百上千个,手工修改太辛苦了。
于是,现在又想:怎么样才能更详细地匹配比较“两个字典内最相似的元素的变化”?
——我不是程序员,也许我的思路不对,还有没有更好的办法?
以下是我写的python脚本:
(我连“调用对象”的用法还没搞懂,以下代码也不怕让大家见笑了。)
代码: 全选
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import sys;
import codecs;
import importlib,sys
importlib.reload(sys)
import re
# 此文件是 python3 脚本,读取第一个文件(原本手工编排的po文件)和第二个文件(经过pot更新保存的新po文件),
# 第一个文件按空行提取元素,判断如果也存在于第二个文件中,则写入第三个文件;
# 如果不存在,则标明“有变化”写入第三个文件。
read_old_file = open(sys.argv[1]) # 原本手工编排的旧po文件
read_new_file = open(sys.argv[2]) # 经过pot更新保存的新po文件
outfile = open(sys.argv[1]+"-已更新并排序.txt","w") # 排序后的最新po文件
i=0
old_data = {} # 按空行将旧文件转换为字典
with read_old_file :
for group in read_old_file.read().split('\n\n'): # 按空行分割
key = i
i=i+1
# group_ok = group.encode("gb18030") # 按 gb18030 编码,再放入字典,否则查询不出
old_data[key] = group # 序号:内容
# print (old_data) # 打印字典不会自动换行
i=0
new_data = {} # 按空行将新文件转换为字典
with read_new_file :
for group in read_new_file.read().split('\n\n'): # 按空行分割
key = i
i=i+1
# group_ok = group.encode("gb18030") # 按 gb18030 编码,再放入字典,否则查询不出
new_data[key] = group # 序号:内容
# print (new_data) # 打印字典不会自动换行
old_values = old_data.values() # 只提取字典的值
new_values = new_data.values()
for old_v in old_values: # 遍历旧文件字典的值
if old_v in new_values: # 判断这个值是否在新字典里,也就是“不变”
# print (old_v)
outfile.write(old_v+'\n\n') # 写入输出文件
else:
old_vv = old_v.split('\n')
if old_vv[0] == "# # # ": # 如果是我自己手工写的“章节备注”则直接写入输出文件
outfile.write(old_v+'\n\n')
else:
outfile.write('# 有变化!\n') # 有更新的则标注说明
outfile.write(old_v+'\n\n')