Closed sanak closed 3 years ago
ローカル環境で下記の個人(@sanak)ブランチで色々と試しましたが、 https://github.com/sanak/OSGeoLive-doc-omegat/commit/80f95052011d15b5b20253db32ba353bdd0a0602#diff-85875241781b485c498e271dae2c7a97594e849c73eadb5ed67586ba3322fa69
Transifexの tx pull
がどのようにPOファイルの msgstr
部分の文節区切りを行うかの法則性が掴めず、ブラックボックスとなって解決の目処が立たなかったため、Transifexの出力に合わせる形でなく、TransifexとOmegaTの取得/出力POファイルを、同じフォーマッタにかけることで、実際の差分の抽出を容易に行える形に変更します。
(念のため、下記は下調べ中に確認したOmegaTでのPOファイル出力箇所ソースと参考リンク。)
フォーマット処理については、下記のPythonスクリプトでローカル環境での動作確認済みですが、TransifexとOmegaTの双方で処理を流す必要があることから、 format_target.py
ファイルについては、 omegat
側でなく、 doc
側に名前を変えて(format_pofiles.py
など)持たせる形に変更します。
TransifexとOmegaT双方用のフォーマッタスクリプト:
#!/usr/bin/env python3
import argparse
import os
import io
from babel.messages import pofile
PO_EXT = ".po"
def load_catalogs(top_dir):
catalogs = {}
for root, dirs, files in os.walk(top_dir, topdown=False):
for file in files:
if file.endswith(PO_EXT):
path = os.path.join(root, file)
rel_path = os.path.relpath(path, top_dir)
with io.open(path, 'rb') as f:
catalogs[rel_path] = pofile.read_po(f)
else:
continue
return catalogs
def main(args):
# Load po files
catalogs = load_catalogs(args.directory)
# Format catalogs
for rel_path in catalogs:
catalog = catalogs[rel_path]
path = os.path.join(args.directory, rel_path)
catalog.fuzzy = True
# Write po file
with io.open(path, 'wb') as f:
pofile.write_po(f, catalog, width=79)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Format po files')
parser.add_argument('directory', nargs='?', default='./target',
help="A directory to format po files (default is './target')")
args = parser.parse_args()
main(args)
上記より、omegat
側からは、最終的に tools/format_target.py
ファイルを削除するのみの形となりますが、 doc
側で https://github.com/OSGeo-jp/OSGeoLive-doc/issues/11 の対応後に作業を進めることを想定していますので、おそらく明日(1/11(月))中目処の作業になると思います。
POファイルのフォーマットについて、 doc
側で大体の動作を確認できたので、 omegat
側からは tools/format_target.py
を削除します。
改善要望は何らかの問題に関連していますか? 説明をお願いします。 現状、
format_target.py
が出力するPOファイルのmsgid
・msgstr
区切り位置が微妙に異なり、また、POファイル末尾の空行数が異なっていて、チェック・マージ作業がかなりストレスフルになっている。望ましい解決策についての説明 翻訳内容に変更がない限り、
format_target.py
の出力結果が、TransifexのPull結果と完全一致するようにする。検討した代替案についての説明 POファイルのRead/Writeに利用しているBabelの
pofile
・catalog
クラスをオーバーライド?もしくは、polibでのRead/Writeへの切り替えを検討する。