Gettext
表示
GNU gettext は、ソフトウェアの国際化(i18n: internationalization)と地域化(l10n: localization)を支援するツールとライブラリのセットです。これにより、ソフトウェアが多言語対応を行いやすくなり、異なる言語のユーザーに対して適切なメッセージを表示できるようになります。
主な目的
[編集]- 多言語対応の簡素化:
- 1つのソースコードで複数の言語をサポート可能。
- 言語ごとに個別のコードを書く必要がなくなる。
- 翻訳の効率化:
- ソフトウェアの翻訳作業を簡略化し、翻訳ファイルを管理できるようにします。
- 標準化された仕組みの提供:
- メッセージの抽出、翻訳、再利用のプロセスを標準化します。
GNU gettext の基本的な仕組み
[編集]GNU gettext は以下のようなファイルを使って翻訳を実現します。
- POT ファイル(Portable Object Template):
- 翻訳の元になるテンプレートファイル。
- プログラム内で使用されている翻訳可能な文字列を抽出して生成されます。
- PO ファイル(Portable Object):
- 各言語ごとの翻訳を記述するファイル。
- 開発者または翻訳者がこのファイルに翻訳を追加します。
- MO ファイル(Machine Object):
- 翻訳済みの PO ファイルをバイナリ形式に変換したファイル。
- 実行時にプログラムが読み取る形式。
基本的な流れ
[編集]以下は、gettext を利用して国際化を進める手順の概要です。
ソースコードの修正
[編集]翻訳が必要な箇所をマクロ _()
で囲みます。
- 例
#include <libintl.h> #include <locale.h> int main() { setlocale(LC_ALL, ""); bindtextdomain("myapp", "/usr/share/locale"); textdomain("myapp"); printf(_("Hello, World!\n")); return 0; }
翻訳可能な文字列を抽出
[編集]xgettext
コマンドを使用して、ソースコードから翻訳可能な文字列を抽出し、POT ファイルを生成します。
xgettext -k_ -o messages.pot main.c
翻訳ファイルの作成
[編集]POT ファイルから PO ファイルを生成します。
msginit -i messages.pot -o ja.po --locale=ja
ここで ja.po
は日本語用の翻訳ファイルです。
翻訳内容の編集
[編集]ja.po
をテキストエディタで開き、翻訳を追加します。
- 例 (
ja.po
) msgid "Hello, World!" msgstr "こんにちは、世界!"
翻訳ファイルをコンパイル
[編集]msgfmt
コマンドで MO ファイルを生成します。
msgfmt -o ja.mo ja.po
プログラムで翻訳を利用
[編集]MO ファイルを適切なディレクトリ(例: /usr/share/locale/ja/LC_MESSAGES/
)に配置します。プログラムを実行すると、対応する翻訳が適用されます。
主なコマンドとツール
[編集]- xgettext:
- ソースコードから翻訳可能な文字列を抽出して POT ファイルを生成します。
- msginit:
- POT ファイルから翻訳者用の PO ファイルを作成します。
- msgfmt:
- PO ファイルを MO ファイルにコンパイルします。
- msgmerge:
- 新しい POT ファイルと既存の PO ファイルをマージし、翻訳の更新をサポートします。
- msgcat:
- PO ファイルを結合または正規化します。
GNU gettext のメリット
[編集]- 統一的なツールチェーン:
- 翻訳可能な文字列の抽出から管理、適用までを一貫してサポート。
- 開発者と翻訳者の分業が可能:
- 開発者はコードを書くことに集中し、翻訳者は PO ファイルに翻訳を記述するだけで済む。
- 再利用可能な翻訳:
- 既存の翻訳を別のプロジェクトや新しいバージョンに簡単に適用可能。
関連ツールと拡張
[編集]- glib-gettextize:
- Glib ベースのプロジェクトで gettext を利用しやすくするツール。
- autopoint:
- Autotools を使用するプロジェクトで gettext サポートを追加するためのツール。
- GNU Autotools:
- Autoconf、Automake などと連携して、gettext を使ったビルド環境を構築可能。
- GNU autoconf-archive:
- gettext の初期化を簡略化するマクロを含む。
GNU gettext の活用例
[編集]- Linux デスクトップ環境:
- CLI ツール:
- Git や GDB のようなコマンドラインツールも gettext を使用している。
- ウェブアプリケーション:
- Django などのフレームワークでも gettext ベースの国際化をサポート。
まとめ
[編集]GNU gettext は、ソフトウェアを多言語対応にするための強力なツールセットです。これにより、プログラムが異なる地域や言語のユーザーに対応しやすくなります。翻訳の作業を効率化し、開発者と翻訳者の分業を可能にすることで、国際化対応のハードルを大幅に下げる役割を果たします。