Skip to content

Transifex を使って翻訳

Kouki NAGATA edited this page May 21, 2019 · 10 revisions

Transifex を使って Sakai の翻訳を行う方法を述べます. 通常の翻訳で Transifex を使う必要はあまりないかもしれませんが, 大量の文章をスクリプトで変換しようとする場合などは有効です.

翻訳の仕組み

Sakai の他言語対応は拡張子が .properties のファイルにより行われています. Sakai の翻訳は翻訳支援システムである Transifex で行われています. Transifex からは Sakai のための .po ファイルが入手でき, .properties ファイルはこの .po ファイルから生成されます. Transifex とローカルの .po ファイル間のやり取りは l10n ツールによって簡単に行うことができます.

環境

必要なソフトウェア

  • Python 2.x (3.x でも大丈夫かもしれない)
  • pip
  • Git
  • GitHub アカウント
  • Transifex アカウント
    • Sakai のグループにメンバーとして登録されていることが必要

レポジトリをクローン

Sakai または OpenPandA を Git を用いてクローンし,そのディレクトリの下に l10n をクローンします.

$ git clone [email protected]:kyoto -u/openpanda.git
$ cd ./openpanda
$ git clone [email protected]:JaSakai/l10n.git

Transifex クライアントツールのインストール

Transifex と自分の PC 間で翻訳ファイルをやり取りするためのツール tx をインストールします.

$ pip install transifex-client
$ pip install -upgrade transifex-client

初期設定

tx の初期化を以下のように行います

$ tx init
Transifex instance [https://www.transifex.com]: #何も入力しない
Creating skelton ...
Creating config file ...
No configuration file found.
No entry found for host https://transifex.com. Creating...
Please enter your transifex username: #transifexのユーザ名を入力
Password: #パスワードを入力
Updating /home/username/.transifex file...
Done

このとき入力した情報は暗号化されずに ~/.transifex に保存されます.

次にプロジェクトに対して l10n ツールで初期化を行います. 先ほどクローンした l10n ディレクトリの下に移動し次のコマンドを実行します.

$ python tmx.py init

翻訳

リソースのダウンロードと変換

Transifex から .po ファイルをダウンロードしさらに .properties ファイルに変換するには, l10n ディレクトリの下で

$ python tmx.py download -u -l ja

とします. すると ./ja というディレクトリが作成され .po ファイルがダウンロードされます. またこの .po ファイルから生成された .properties ファイルがローカルの openpanda に反映されます. この .po ファイルや .properties ファイルを 編集することで翻訳を行うことができます.

リソースの変換とアップロード

翻訳した .properties ファイルを .po ファイルに変換し Transifex にアップロードするには l10n ディレクトリの下で次のようにします.

$ python tmx.py upload -mu

このとき Transifex で翻訳済みだったものは無視されアップロードされません(.po ファイルには反映されます). 新たに翻訳したもののみが Transifex に反映されます.

.properties ファイルの構造

.properties ファイルの構造は次のようになっている

#comment
key_0=text_0
key_1=text_1
key_2=text_2

# で始まる行はコメントである. key_n が Sakai のソースコードで参照するキーとなり,text_nがそのキーに対応する値となる. この値は ascii 文字以外はユニコードエスケープになっている.

.po ファイルの構造

.po ファイルの構造は次のようになっている.

#. java.acccess
#: access/access-impl/impl/src/bundle/access.properties:1
msgctxt "access/access -impl/impl/src/bundle/access.properties:java.acccess"
msgid "Access:"
msgstr "アクセス:"

各翻訳単位ごとに, 1 行目に .properties のキーに対応する文字列があり, 2 行目はその .properties ファイルのソースファイル名と番号が記述されている. 3 行目の msgctxt は別ファイルの同じ翻訳テキストを区別するための情報である. 4 行目の msgid は翻訳対象となる英文である. 5 行目の msgstr は翻訳後の文字列である.

Python スクリプトで翻訳

ここでは .po ファイルをスクリプトを用いて編集する方法を紹介する. まず Python のライブラリ polib が必要なのでインストールする(l10n ツールについてくるのでそれを用いてもよい).

$ pip install polib

例えば今,全ての「。」を全角ピリオド「.」に変換したいとする. まず python スクリプトファイルを作成し l10n の下に保存する.

import polib
import tmx
def conv( filename ) :
  po = polib.pofile( filename )
  flag = False
  print( filename )
  for e in po :
    e.msgstr = trans( e.msgstr )
  po.save( filename )

def trans( msgstr ) :
  return msgstr.replace(’。’, ’.’)

def main() :
  l = tmx.EnumModulesFromPo(’ja’)
  for f in l :
    conv( ’./ja/’ + f + ’.po’ )

if __name == ’__main__’ :
  main ()

これを以下のように実行すればよい.

$ python trans.py

生成された .po.properties に変換するには

$ python
>>> import l10n
>>> import tmx
>>> polist = tmx.EnumModulesFromPo(’ja’)
>>> l10n.l10n( polist, True, ’ja’, True, False )
>>> quit ()

とする.