はじめに
Zabbix Advent Calendar 2018の7日目です。
ZabbixのWebインターフェースを日本語表示にも切り替えて利用できることはご存知とは思いますが、その翻訳が気に入らないことがあるかもしれません。
日本語の翻訳は、現在Zabbix Japanの代表をされている寺島広大さんが翻訳されたものをベースに、私も一緒になってコミュニティなどからも意見を受け付けながら更新してきたものです。
でも、「あなたの翻訳が気に入らないわ」という方の為に、日本語翻訳の変更方法をご紹介しましょう。
使用されている技術
まず、ZabbixのWebインターフェースでは、gettextというソフトウェアを利用して多言語対応を行っています。
gettext https://www.gnu.org/software/gettext/
各言語用のPOファイルを用意して、msgfmtコマンドを使用してプログラムからより高速に扱いやすいバイナリ形式のMOファイルに変換しておきます。PHPはそのMOファイルから値を取り出して、表示時に設定されている言語設定に合わせた翻訳語に置き換えて表示するようになっています。
例えば、Webインターフェースでログイン後に表示される「ダッシュボード」という言葉は、/usr/share/zabbix/include/menu.inc.phpの46行目あたりに「_('Dashboard')」と表記されているのが翻訳元の文字列の表記です。これに対応させて、日本語なら「ダッシュボード」という文字列に置き換えるようにするわけです。
日本語翻訳の編集方法
それでは、日本語翻訳の編集方法を説明していきましょう。
ここでは、RHEL 7(CentOS 7)にZabbix 4.0.2のWebインターフェースをパッケージでインストールした環境であると仮定させて頂きます。
そうすると、各言語の用のMOファイルが、/usr/share/zabbix/localeディレクトリ以下に、各言語ごとに用意されていることを確認できると思います。
他のOSであっても、localeディレクトリからの相対位置で対応はできますので、localeディレクトリの位置を確認しておいてください。
あとは、ここからどう進めるかですが、Zabbixでは、翻訳対象の文字列の洗い出しと更新反映の為のスクリプトが用意されています。
とはいえ、最近はパッケージでインストールした時にインストールされなくなってしまいましたので、そのスクリプトはソースのtar.gzファイルから取り出して利用することとなります。
現在インストールしてあるZabbixのバージョンに合わせてソースファイルを取得してきてください。
ダウンロードページ:
https://www.zabbix.com/download_sources
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/
Zabbix 4.0.2のソースファイルは「zabbix-4.0.2.tar.gz」となります。
まずは、翻訳用のファイルを配置します。
ソースファイルを展開して、翻訳語更新に必要となるスクリプトと、ベースとなる元の翻訳ファイルを取り出します。
# tar zxvf zabbix-4.0.2.tar.gz
# cp zabbix-4.0.2/frontends/php/locale/*.sh /usr/share/zabbix/locale/
# cp zabbix-4.0.2/frontends/php/locale/ja/LC_MESSAGES/frontend.po /usr/share/zabbix/locale/ja/LC_MESSAGES/
ソースに含まれる翻訳済のPOファイルは古い場合があるので、PHPから最新の情報を取集してPOファイルを最新の状態にします。
# cd /usr/share/zabbix/locale/
# ./update_po.sh
あとは、ja/LC_MESSAGES/frontend.poを変更します。
# vi ja/LC_MESSAGES/frontend.po
先ほどの「ダッシュボード」であれば、POファイル内に以下のような記述があると思います。
#: app/controllers/CControllerDashboardView.php:157 include/menu.inc.php:46
msgid "Dashboard"
msgstr "ダッシュボード"
日本語翻訳を変更したいのであれば、msgstr側のダブルクォーテーションで括られた中を変更するわけです。
それ以外も、変更したい翻訳箇所があれば、該当する翻訳語のmsgstrを変更するだけです。
「#:」で始まる行は、その翻訳語がどのPHPファイル内で使用されているかが書かれているので、変更したい場所を特定するのに使用するとよいでしょう。
「msgstr ""」という行があったら、その部分は翻訳されていない文字列です。
frontend.poの編集が終わったら、MOファイルへの変換とWebサーバーの再起動を行います。
# cd /usr/share/zabbix/locale/
# ./make_mo.sh
# systemctl restart httpd
ブラウザでリロードすれば、変更が反映されているはずです。
各バージョンの最新の翻訳は、以下のサイトでも確認することができます。
Zabbix翻訳システム https://www.zabbix.org/pootle/ja/
翻訳システムとソースとの同期はあまり頻繁ではなかったりするので、ここからダウンロードしてもすべて翻訳された状態ではない場合もあるかもしれません。
また、あまり勝手に更新されないよう、日本語翻訳の更新権限を持つ人は限定させて頂いています。
TYPOなど軽微な誤りであれば、ご連絡頂ければすぐに翻訳システム上を修正致しますので、何かありましたらご連絡ください。
大幅な変更に関しては、ご意見は伺いますが反映するかどうかは検討させてください。
注意点
ただし、独自に翻訳した画面のメッセージを利用してコミュニティや公式な問い合わせ窓口に問い合わせしないでくださいね。
どの画面のどのメッセージや状態に関する問い合わせであるのかを特定できません。
最初の英語の画面か、各Zabbixのバージョン用のデフォルトの日本語翻訳を使用してお問い合わせ頂きますようお願いします。