<?php
// ドイツ語に設定します
setlocale(LC_ALL, 'de_DE');
// 変換テーブルの場所を指定します
bindtextdomain("myPHPApp", "./locale");
// ドメインを選択します
textdomain("myPHPApp");
// 翻訳内容は ./locale/de_DE/LC_MESSAGES/myPHPApp.mo から検索されます
// テストメッセージを出力します
echo gettext("Welcome to My PHP Application");
// あるいは、gettext() のかわりに _() も使用可能です
echo _("Have a nice day");
?>
| setlocale() |
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/20 02:59 UTC 版)
| 開発元 | GNUプロジェクト |
|---|---|
| 最新版 | |
| リポジトリ | |
| 対応OS | クロスプラットフォーム |
| 種別 | ライブラリ |
| ライセンス | GPL (0.17以後のlibintlはLGPLに改変 以前はGPL その他全てはGPL) |
| 公式サイト | https://www.gnu.org/software/gettext/ |
gettextは国際化と地域化に対応するライブラリ構成要素の一つであり、様々な地域の言語に対応した地域化ソフトウェアを開発する際に用いられる。gettextライブラリを用いることで、ソフトウェアの対話的メッセージを翻訳された現地語にて容易に表示させることができる。
まず、gettextが利用されるようソースコードの修正を行なう。これはほとんどのプログラミング言語において、ソースコード中の文字列がまずgettext関数へ渡されるよう、文字列をラップしていく作業となる。読みやすさやキータイプの手間を省くため gettextには通常 _ のエイリアスが付けられる。C言語では、
printf("My name is %s.\n", my_name);
を以下のように変更する:
printf(_("My name is %s.\n"), my_name);
C言語以外にもgettextは以下の言語/シェルコマンドで実装されている: C++、Objective-C、Bourne Shell、Bash、Python、GNU CLISP、Emacs Lisp、librep、GNU Smalltalk、Java、GNU Awk、Pascal、wxWidgets (WxLocaleクラスによる)、YCP、Tcl、Perl、PHP、Ruby、Pike、JavaScript。ほとんどの場合、使用方法はC言語の場合と同様である。
ソースコード修正後、xgettextコマンドを用いて翻訳可能な全ての文字列のリストを保持する .potファイル(「テンプレート」とも呼ばれる)を生成する。.potファイル中のエントリは以下のようになる:
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""
文字列の直前にコメントを置くと、ヘルパプログラムはコメントを翻訳者へのヒントとして扱う。
// TRANSLATORS: %s はそのままにして下さい。プログラムが変更します。
printf(_("My name is %s.\n"), my_name);
この例では、コメントは TRANSLATORS: で始まる。そして xgettext は .pot テンプレートファイルを作成する際に翻訳者のためにそのコメントを抽出する。
$ xgettext --add-comments=TRANSLATORS:
生成された .pot ファイルにはこのようなコメントが付く。
#. TRANSLATORS: %s はそのままにして下さい。プログラムが変更します。
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""
翻訳者はまず、上記のテンプレートを入力として、msginitコマンドにより、翻訳リソースファイル(.poファイル)の初期状態のものを生成し、それに対して翻訳作業を行っていく。日本語への翻訳作業を行なう場合であれば、
$ msginit --locale=ja --input=name.pot
を実行し、これにより ja.poファイルが生成される。ファイル内部のエントリは以下のようになる:
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""
翻訳者は手作業あるいは Poeditのようなツールによりこれらを編集する。編集後は以下のようになる:
#: src/name.c:36
msgid "My name is %s.\n"
msgstr "私の名前は %sです。\n"
最終的に、.poファイルは msgfmtコマンドにより .moのバイナリファイルにコンパイルされ、この状態で、該当ソフトウェアパッケージの一部として配布されることになる。
UNIXライクなシステムにおけるユーザは、ロケールLANGUAGEを環境変数LANGにセットする。ここでLANGUAGEは、IETF言語タグに基づく値である。
LANG=LANGUAGE [2]
例えばシステムのエンコーディングがUTF-8であり日本国 (JP) の日本語 (ja) を話すユーザの場合、LANGUAGEは(IETF言語タグのハイフォンをアンダースコアに置き換えて)ja_JP.UTF-8をとる。
LANG=ja_JP.UTF-8
システムが環境変数より翻訳リソースを検索し(.moファイル中に該当言語のリソースがありさえすれば)、アプリケーションにその言語による表示を行わせることができる。
setenv LANG LANGUAGEのようになる。 出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/05 22:40 UTC 版)
プログラム中の文字列のローカライズ(地域化)を支援するツール。
※この「gettext」の解説は、「国際化と地域化」の解説の一部です。
「gettext」を含む「国際化と地域化」の記事については、「国際化と地域化」の概要を参照ください。
固有名詞の分類
| オープンソース |
MetaPost EmuTOS Gettext CakePHP Free Pascal |
| PHP |
ascii2ebcdic atan2 Gettext next CakePHP |
| PHP |
ascii2ebcdic atan2 Gettext next CakePHP |
| ライブラリ (プログラミング) |
Video for Windows SLATEC Gettext GObject Zlib |