Zabbixの日本語翻訳を変更したい

# はじめに
Zabbix Advent Calendar 2015の20日目です。

日本の方は、ZabbixのWebインターフェースを日本語に切り替えて利用して頂いている方が多いと思います。ただし、利用しているうちに元々の日本語の翻訳を変更したいな、と思われるかもしれません。

そんな時に、Webインターフェースの翻訳メッセージを変更できるよう、変更方法をご紹介しましょう。

# 現状
Zabbixは、Webインターフェースの部分が多言語対応されているので、好きな言語表示に切り替えて利用することができます。

日本語の翻訳に関しては、初期は、現在Zabbix Japanの代表をされている寺島広大さんが中心となって対応をされていたと思うのですが、現在は、私やコミュニティのメンバーも参加して最新の翻訳への更新や改善を行っています。

より日本の方々に伝わりやすい翻訳をと心がけてはいますが、既存のシステムや運用環境によっては、Zabbixでの用語よりも、既存の用語に合わせて利用されたい場合もあると思います。


# 利用している技術
ZabbixのWebインターフェースの多言語対応には、gettextというツールが利用されています。

GNU gettext
https://www.gnu.org/software/gettext/

ベースとなるHTML(PHP)内の翻訳可能な文字列に対して、特定のルールで表記することで翻訳可能な文字列一覧を収集することが可能です。

あとは、その翻訳可能な文字列一覧に対して、各言語ごとに対応する翻訳メッセージ一覧を作成することで、言語を切り替えて表示を変化させることができるようになっています。


# 翻訳の変更
翻訳の変更作業を開始する前に、ソフトウェアのgettextがインストールされているかを確認しておきます。パッケージでインストールされているのであれば、gettextのパッケージがインストールされているかを確認します。

ちなみに、翻訳の変更作業には、gettextの中でも

- xgettext
- msgmerge
- msgattrib
- msgfmt

の4つのコマンドを利用するので、これらのコマンドがあるか確認しておきましょう。

では、翻訳の変更作業に入ります。

今回は、日本語の翻訳を変更するので、Webインターフェースを配置したディレクトリの下の locale/ja/LC_MESSAGES/frontend.po を編集します。
Zabbix SIAのパッケージを利用しているのであれば、変更する対象のファイルは、

```
/usr/share/zabbix/locale/ja/LC_MESSAGES/frontend.po
```

です。

最近は、Zabbixの各バージョン(マイナーバージョン含む)の正式リリースのタイミングの前に、文字列を変更せずに翻訳を終わらせるための期間を取ってもらえるようになったので必要ないかもしれませんが、一応、編集に入る前にPHPなどが変更されて翻訳可能な文字列が追加されたり削除されたりしていないか、poファイルを最新の状態にしましょう。

以下の説明は、Zabbix SIAのパッケージを利用してインストールした際のディレクトリ構成で説明します。別のディレクトリにインストールされている方は、ディレクトリは読み替えてください。

```
# cd /usr/share/zabbix/locale/
# ./update_po.sh
```

これを実行することで、各PHPで変更されたり追加されたりした翻訳可能な文字列のリストを更新することができます。

最新の状態にしたら、変更したいメッセージを変更するわけですが、フォーマットを確認しましょう。
参照するファイルは上でも紹介した通り、

```
/usr/share/zabbix/locale/ja/LC_MESSAGES/frontend.po
```

です。
例えば、ダッシュボードのトップで左上に表示される「監視データ」という翻訳の部分は以下のようになっています。

```pot:frontend.po
#: include/menu.inc.php:26 include/views/inventory.host.view.php:207
msgid "Monitoring"
msgstr "監視データ"
```

msgidというのが翻訳される前の元の文字列で、msgstrというのが翻訳結果の文字列です。
変更の仕方としては、例えば「監視データ」という日本語を「監視情報」と変更したいとします。
そうすると、frontend.po の先ほどの部分を以下のように編集します。

```pot:frontend.po
#: include/menu.inc.php:26 include/views/inventory.host.view.php:207
msgid "Monitoring"
msgstr "監視情報"
```

msgidの方は、翻訳する元の文字列ですので、この部分は変更しないでください。msgstrのダブルコーテーションで括られた中の文字列のみを変更します。

変更したら、変更内容を保存してエディタを終了させてください。

# 翻訳変更の反映
変更した翻訳を反映するには、poファイルからmoファイルへ変換して、そのmoファイルをWebサーバーに読み込ませなければなりません。
poファイルからmoファイルへの変換は、スクリプトが用意されているのでそれを利用し、変換後にWebサーバを再起動すればOKです。

CentOS 6系であれば以下のような手順です。

```shell-session
# cd /usr/share/zabbix/locale
# ./make_mo.sh
# service httpd restart
```

CentOS 7系であれば以下のような手順です。

```shell-session
# cd /usr/share/zabbix/locale
# ./make_mo.sh
# systemctl restart httpd.service
```

Webサーバーが再起動できたら、Webブラウザで変更されているかアクセスしてみてください。

# 注意点
WebインターフェースのHTMLの部分の日本語対応は、この手順だけで対応できますが、グラフの中の日本語が文字化けしてしまっている場合は、さらに設定が必要です。

Zabbix SIAが公開してくれているパッケージを利用されている場合は、zabbix-web-japaneseというパッケージをインストールするだけで解決することができます。

ソースからインストールされていたり、Zabbix SIAが公開してくれているパッケージ以外を利用されている場合は、別途、日本語用のフォントのインストールと設定ファイルの書き換えが必要となる場合が多いでしょう。
「Zabbix 日本語 グラフ 文字化け」などのキーワードで探せばすぐに見つかると思いますので探してみてください。

私は、Zabbix SIAのパッケージで利用しているalternativesを利用する方法がCool!だと思います。というのも、ZabbixのPHPを変更せずに、alternativesコマンドで好きなフォントに切り替えることができるからです。
今後のパッケージのアップデート時などでも、パッケージで提供されている部分を変更しないようできるので、より確実にアップグレードできるでしょうし、好きなフォントに替えるのも比較的簡単です。

# おまけ
frontend.poファイル内の翻訳可能な文字列をよく見て頂くと、日付のフォーマットもあったりします。
ZabbixのWebインターフェース上のすべての箇所ではありませんが、そういったフォーマットもこのfrontend.poファイルを編集することで変更することができます。

英語で表示したいけど、この日付フォーマットはいただけないという方は、英語用のfrontend.poファイル内の日付フォーマット用の文字列を同様に変更してみてください。

# まとめ
これで、ZabbixのWebインターフェースをお好きな日本語翻訳に変更することができます。

ただし、何か問題が発生してご質問される際には、独自に変更された翻訳メッセージを利用してご質問頂いても、どの画面のどの部分での問題や質問であるかわかりません。
ご質問頂く時には、変更されていない元の翻訳での表記を利用するか、翻訳前の英語の表記を利用して頂きますようお願いします。

最新の翻訳メッセージの内容を参照したい場合は、後ろで紹介する「Pootle for translating Zabbix」を参照してみてください。
様々な言語とそれぞれの言語のいくつかのバージョンに対する翻訳状況を参照することができます。

この記事の執筆時点(2015/12/10)では、「Zabbix trunk」というのが、Zabbix 3.0の翻訳となります。


# 昔話
翻訳のミスがあったおかげで「Zabbix銘菓」という言葉が生まれたのは知る人ぞ知る。


# 参考
- [Pootle for translating Zabbix](https://www.zabbix.org/pootle/)
- [Zabbix 2.0 のグラフの文字化けを直す、「alternatives」での日本語フォント設定方法](http://sechiro.hatenablog.com/entry/2013/08/27/Zabbix_2.0_%E3%81%AE%E3%82%B0%E3%83%A9%E3%83%95%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%82%92%E7%9B%B4%E3%81%99%E3%80%81%E3%80%8Calternatives%E3%80%8D%E3%81%A7%E3%81%AE%E6%97%A5%E6%9C%AC)

次は、osaponさんですね。
よろしくお願いします。