Mezzanine の 翻訳ファイル (po ファイル) をメンテナンスする


Mezzanine にはというか django には 国際化機能があり、
Mezzanine の翻訳ファイルもその機能で作成されています。

翻訳の一部で気になっていた箇所があり、
翻訳ファイルを修正して、Pull Request を送ったので、
その時の手順を記載しておきます。


参考記事


前提

  • OS Version

    sw_vers    
    ----------------------------
    ProductName:    Mac OS X
    ProductVersion: 10.11.6
    BuildVersion:   15G1108
    ----------------------------
    

  • python Version

    python -V
    
    ----------------------
    Python 2.7.10
    
    ----------------------
    


django-admin-tools の インストール

翻訳には、django 管理ツールの makemessagescompilemessages を使います。
これらのコマンドが、manage.pyを介さなくても実行できるように、
django-admin-tools をインストールします。

pip install django-admin-tools

適当な場所で、以下のコマンドを実行します。
CommandError で、gettext が入ってるか確認しろと出るので、
gettext をインストールします。

django-admin.py makemessages
--------------------------------------
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
--------------------------------------

gettext の インストール

brew で インストールします。

brew install gettext
---------------------------------------
 /usr/local/Cellar/gettext/0.19.8.1: 1,934 files, 16.9M
---------------------------------------
再度、makemessages を実行しても、まだエラーが出るので、

django-admin.py makemessages -l ja
---------------------------------------
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
---------------------------------------
pathを通すため、以下のコマンドを実行します。
brew link --force gettext
---------------------------------------
Linking /usr/local/Cellar/gettext/0.19.8.1... 185 symlinks created
---------------------------------------


Mezzanine リポジトリに対して実施したこと

Mezzanine の翻訳ファイルの作成時に実施したことを記載します。
djangoプロジェクトならほぼ同じような手順になるかと思います。

github で folk。 clone して、branchを作成する。

  • stephenmcd/mezzanine: CMS framework for Django を Folk。

  • Folk したリポジトリを ローカルにgit clone する。

    git clone https://github.com/{フォークしたリポジトリ}.git
    

  • Local にブランチ(作業用)を作成

    git branch develop_sandbox
    

  • 作成したブランチに移動

    git checkout develop_sandbox
    

編集対象の、django.po をリストアップ

これは、TODO用途に対象のdjango.poファイルを控えたかっただけとなります。
mezzanineのアプリケーションごとに、django.poファイルが存在します。

find ./ -name django.po | grep /ja/
------------------------------------------------
.//mezzanine/accounts/locale/ja/LC_MESSAGES/django.po
.//mezzanine/blog/locale/ja/LC_MESSAGES/django.po
.//mezzanine/conf/locale/ja/LC_MESSAGES/django.po
.//mezzanine/core/locale/ja/LC_MESSAGES/django.po
.//mezzanine/forms/locale/ja/LC_MESSAGES/django.po
.//mezzanine/galleries/locale/ja/LC_MESSAGES/django.po
.//mezzanine/generic/locale/ja/LC_MESSAGES/django.po
.//mezzanine/mobile/locale/ja/LC_MESSAGES/django.po
.//mezzanine/pages/locale/ja/LC_MESSAGES/django.po
.//mezzanine/twitter/locale/ja/LC_MESSAGES/django.po
------------------------------------------------

django.po ファイルの編集

  • ディレクトリ移動

    cd .//mezzanine/accounts
    

  • makemessages の実行

    django-admin.py makemessages -l ja
    
    実行するまで、わかりませんでしたが、既存の翻訳済メッセージも引き継がれた状態で、差分メッセージが追加&削除された django.po ファイルが生成されます。
    もう1つ階層が上でも、django-admin.py makemessages -l ja は実行できますが、django.poファイル内の、メッセージ使用箇所のファイル名と行数の記述、が変わってきます。
    このため、アプリケーションディレクトリで、makemessages を実行したほうがよいかと思います。
    以下、変更箇所の例を抜粋。
    # アプリケーションディレクトリ直下で生成した場合
    #: templates/accounts/account_signup.html:11
    
    # mezzanineディレクトリ(1つ上の階層で実行した場合)
    #: accounts/templates/accounts/account_signup.html:11
    

  • msgid に対する 翻訳文字列 msgstr を割り当てる。 msgid に対して、msgstrが未設定"" の箇所に翻訳した文字列を設定します。
    例えば、以下のようになります。

    msgid "Email"
    msgstr "Eメール"
    

  • compilemessages を実行

    django-admin.py compilemessages -l ja
    

  • 一通り作業が終わったら git commit

    git commit -m "modify django.po" ./locale/ja/LC_MESSAGES/django.po
    git commit -m "generate django.mo" ./locale/ja/LC_MESSAGES/django.mo
    

この作業を、繰り返します。


編集後のファイルを Pull Reuqest

  • master ブランチに切り替え

    git checkout master
    

  • squash オプションでマージ

    git merge –-squash develop_sandbox
    
    squash したのは、pull request する際に嫌がられたりするかもだったため、実施しました。
    他の翻訳系の pull request はまとまってなかったりしたので、そのままでも OK かもしれません。

  • commit して、 push します。

  • Github 上で Pull Request 送付
    しばし待つ。で、まってたら、マージしてもらえました。

ちなみに気になっていた箇所について

Sitemap.xmlを表示表示
ブログ投稿のメタデータ欄に、サイトマップに含めるか含めないかの、
チェックボックスがあるのですが、それが【サイトマップ内に表示表示】になっていて、
これを【サイトマップ内に表示】にしたかったのです。

元旦に Pull Request、正月に風邪を引きながらやることじゃないですが、
今年も宜しくお願い致します。

以上です。

コメント


カテゴリー