簡単な紹介;

簡単な紹介;

私が知る限り、locale-genユーティリティはファイルのエントリ/usr/lib/locale/locale-archiveに基づくディレクトリの下に機械オブジェクト形式で翻訳ファイルを保存します。また、ユーティリティは翻訳ファイルを機械オブジェクト形式で保存します。たとえば、/etc/locale.gen/usr/share/i18n/locales//usr/share/locale/<locale_dir>/LC_MESSAGES/

# dpkg -L wget | grep nl
/usr/share/locale/nl
/usr/share/locale/nl/LC_MESSAGES
/usr/share/locale/nl/LC_MESSAGES/wget.mo
#

exampleを実行すると、ファイルとファイルの両方が開いているstrace -e open wgetことがわかります。/usr/lib/locale/locale-archive/usr/share/locale/nl/LC_MESSAGES/wget.mo

ディレクトリ内のファイルにはどのローカライズデータが格納されており、/usr/share/locale/<locale_dir>/LC_MESSAGES/どこにありますか/usr/lib/locale/locale-archive

ベストアンサー1

Linuxでローカライズがどのように実装されているのかは事前に全く知らなかったにもかかわらず、それについて学ぶために最善を尽くしました。

簡単な紹介;

/usr/lib/locale/locale アーカイブ

locale-archivelocale-gen(8)を呼び出して作成されたメモリマッピングファイルlocaledef(1)。メモリマッピングとは、プログラムによって生成され呼び出されるとメモリに一度だけロードされることを意味します。
で定義されているすべての言語セットは/etc/locale.gen事前定義されており、アーカイブ自体は非常に静的であるため、メモリに複数回保存する必要はありません。したがって、他のプログラムから呼び出されるたびに、プロセスはすでにメモリにロードされているアーカイブを指すため、プログラム仮想メモリにのみ追加されます。これにより、プロセスの物理メモリスペースを減らすだけでなく、すべてのローカライズ関連システムの速度も向上します。 (追加ディスクI / Oは必要ありません!)

また、すべてのシステム全体の言語を含む競合回復ロケールファイルとして機能するようです。また、このアーカイブはglibcを使用して作成されたソフトウェアでよく使用されます。


/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo

Linux( ) でのソフトウェアの国際化はi18n, 18 chars between 'i' and 'n'GNU-gettext を使って達成できます。

  1. プログラムを書くとき、各printステートメントは、gettext()印刷する必要がある文字列をラップするためにGNU関数を使用するのに適しています。
  2. その後、xgettext(1)ソースを繰り返して.pot (Portable Object Template Files)目的の方法にします。
  3. その後、人間の翻訳者はmsginit(1)通常.po (Portable Object)、メッセージカタログを表すファイルに解析できます。これにより、すべての文字列が手動で翻訳されます。
  4. その後、編集されたファイルをバイナリファイルにmsgfmt(1)コンパイルするために使用されます。これはソフトウェアパッケージに付属することができます。.po.mo (Message Object)

パッケージがシステムにインストールされると、ファイルがいっぱいに/usr/share/locale/<locale_dir>/LC_MESSAGES/なります$PROGRAM.mo。たとえば、wgetが呼び出されると、LANG環境変数は現在のロケール設定を使用するように指示します。wgetこれにより、wget正しいプリコンパイル済み翻訳がポインタを介して読み取りに含まれます.mo binary

追加の詳細とソース

ロケールアーカイブの場合:

メモリマッピング:CentOSメーリングリスト
I18N下請け方法:さまざまなロケールのアーカイブコンパイルに関するFedoraドキュメント

また、locale(1), localedef(1)とのマンページを検討してくださいlocale-gen(8)

ファイルの場合.mo

ファイル作成プロセス.mo:GettextのWikipedia
GNU MOファイル形式:解釈とバイナリ形式

また、xgettext(1), msginit(1)とのマンページを検討してくださいmsgfmt(1)

また、ENV変数LC_MESSAGELOCPATH


私はこれがこの膨大なテーマの表面にすぎないと確信しています。それにもかかわらず、これが始めるのに十分であることを願っています。

おすすめ記事