transk’s 翻訳ブログ

翻訳がらみの情報など

Python で .mxliff ファイルを Excel ファイルに出力するプログラムを作った

翻訳ツールで作業していて

一通り翻訳した後に見直すとき

テキストファイルや Excel ファイルに出力して

それでチェックしている。

Memsource で作業しているときは

ローカルに  .mxliff ファイルが作成される。

.mxliff ファイルは

Memsource XML Localization Interchange File Format の略で

XML または XLIFF の一種だ。

テキストエディターで開いたり

プログラムで編集することができる。

Xbench 3.0(有料版)だと .mxliff ファイルを読み込むことができるんだけど

Xbench 2.9(無料版)だと読み込むことができない。

それについては調べて

.mxliff ファイル内のすべての <target> タグに

state='translated' を追加して

<target state='translated'> のようにすれば

読み込まれることはわかったんだけど

line = line.replace("<target>","<target state='translated'>")

 

Xbench 2.9 だとテキストファイルに出力したときに

マッチ率が出力されない(Xbench 3.0 は出力されたと思う)。

それだと作業しづらいので

Python で .mxliff ファイルの内容を

Excel ファイルに出力するプログラムを作成することにした。

 

入力が .mxliff ファイルで出力が Excel ファイル

使用するライブラリは openpyxl、win32com、BeautifulSoup など。

from bs4 import BeautifulSoup
import openpyxl
import win32com.client

 

最初に 2 つのファイルをオープンして

BeautifulSoup で

各セグメントの内容がある <group> タグを検索してループし

<source> と <target>、<context fuzzyMatch>(マッチ率)を

Excel ファイルに出力する。

<trans-unit m:locked> が True のセグメントは

翻訳対象外のセグメントなのでスキップする。

これで .mxliff ファイルの内容が Excel ファイルに出力される。

 

これで翻訳作業に使うことができるんだけど

せっかくここまでプログラムを作ったので

普段 Excel で見直し用にデータを編集していた作業を

プログラムでやってしまうことにした。

まず、新規の翻訳とファジーマッチを別々のシートに分ける。

要注意として翻訳中にマーキングしておいたセグメントを

ソートしてシートの一番上に持ってくる。

各行の幅の調整やセルの上揃え、セルの折り返し、ソート、シートの倍率などを設定する。

xlTop         = -4160
ws.Range("A:G").VerticalAlignment = xlTop

 

いつも Excel では自分で定義した Office 2003 の配色を使っているんだけど

([ページ レイアウト] > [配色] > [ユーザー定義])

それだけは Python で設定する方法がわからなかった。

 

これをしばらく使ってみて

レアケースのバグが何回かでたが

問題なく使用できている。

openpyxl と win32com を前半と後半でそれぞれ使っているからか

Excel ファイルを受け渡すときに File not found のエラーがでるときがある。

それは Windows でサインインしなおすと解消される。

(開いている Excel を全部閉じるとエラーは起こらないようだ)

必要に迫られて Python のプログラムを作ったんだけど

逆に作業を効率化できた。

 

<target> タグを <target state='translated'></target> に

変更するだけのプログラムも作ったので

Xbench でチェックすることもできる。