Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 国際プログラムの実施手順の概要

国際プログラムの実施手順の概要

  

>国際化(I18N)とは、設計構造とメカニズムにおいて多言語拡張をサポートするソフトウェアのことであり、その機能とコード設計は特定の言語と地域に固有のものではありません。 。 >> One:基本的な実装手順> 1ソースプログラムの編集> vimエディタでソースプログラムを編集します。注:プログラムの国際化を正しく実装するには、ソースプログラムに対応する標準ヘッダーファイルを含める必要があり、メイン関数は、ライブラリlibintl、関数setlocale()、bindtextdomain()、textdomain()などの関連関数を呼び出す必要があります。次のプログラムは簡単な例です。>> #include< stdio.h>> #include< locale.h>> #include< libintl.h>< include< stdlib.h>>>; #define _(String)gettext(String)> int main(int argc、char ** argv)> {> setlocale(LC_ALL、");> bindtextdomain(" gettext"、" > textdomain(" gettext");> printf("%s \\ n"、_(" 1つの世界、1つの夢です!));> return 0;>} >>> 2ソースプログラムをコンパイルします。> gccコマンドを使用してソースプログラムをコンパイルし、実行可能ファイルを生成します。実行後、ソースプログラムの入力関数の文字を表示することができます。コマンド例:> gcc -o gettext gettext.c>> 3翻訳ファイルテンプレートpotの作成> xggetxtコマンドを使用して、ソースプログラムから翻訳情報を抽出し、翻訳ファイルテンプレートpot(Portable Object Template)ファイルを作成します。コマンド例:> xgettext --keyword = _ gettext.c -o gettext.pot>>> 4 potからポータブルオブジェクトのpoファイルを生成>各言語には、独自のポータブルオブジェクトファイル、すなわちpo(Portable)があります。オブジェクトファイル。このファイルはmsgidとmsgstrのペアで構成されます。ここで、msgidはプログラムから抽出された情報を表し、msgstrは翻訳を表します。コマンド例:> cp gettext.pot gettext.po>> 5 poファイルの翻訳された文字を編集し、文字のエンコーディングを変更します。> geditまたはvimエディタでpoファイルを編集し、関連情報を翻訳し、文字セットをUTFに変更します。それ以外の場合はエンコードできません。完了したら、ファイルを保存します。注:複数の言語を実装したい場合は、複数poファイルをコピーして別々に翻訳する必要があります。コマンド例:> gedit gettext.poまたはvim gettext.po>> 6 poファイルからバイナリmoファイルを生成>コンピュータの読み取りを実行するために、msgfmtコマンドを使用してpoファイルをバイナリmo(MachineObject)ファイルに変換します。コマンド例:> msgfmt gettext.po -o gettext.mo>> 7 moファイルを正しいディレクトリ構造に配置する> moファイルの保存場所は、プログラムを国際化するための鍵となります。一般的には、対応する地域のロケールの下の対応するサブディレクトリに配置する必要があります。通常、デフォルトのディレクトリ構造は/usr /locale /share /localです。したがって、この例で生成されたmoは、このディレクトリの下の対応するサブディレクトリに配置する必要があります。ただし、プログラム内のsetlocale()関数は現在のディレクトリ構造の下で翻訳情報を検索するように設定されているため、現在のディレクトリ(つまり、ソースプログラムがあるディレクトリ)内に対応するローカルディレクトリを作成するだけです。この例では、次のディレクトリ構造を作成できます。> zh_CN /LC_MESSAGES /およびen_US /LC_MESSAGES />ディレクトリを作成したら、2つの異なるmoファイルをそれぞれこれら2つのディレクトリに配置します。>> 8環境の設定変数>本サンプルプログラムは、現在の環境設定LANGからLAN情報を読み込むため、以下のようにLANGを設定する必要があります。注:一度に設定できるリージョンは1つだけです。 > LANG = zh_CN.UTF-8> LANG = en_US.UTF-8>> 9プログラムを実行して結果を取得>ターミナルインターフェイスで./gettextを実行して、結果を表示します。 >> 2:国際化プログラムのアップグレード>プログラムをデバッグする過程で、それに応じてソースプログラムを修正することは避けられません。ソースプログラムの変更後に新しく変更された翻訳を正しく表示し、元の翻訳情報を効率的に使用して効率を向上させる方法、つまり国際化プログラムを「アップグレード」する方法>この問題を解決するには、次の手順に従ってください。 >> 1ソースプログラムを変更(追加、削除)します。>> 2新しいpotファイルを生成するためにxgettextを実行します。>コマンド例:> xgettext --keyword = _ gettext.c -o gettext.pot>> 3元のプログラムのpoファイルの名前を変更して、新しいpotファイルによって生成されるpoファイルと区別します。>コマンド例:> mv gettext.po old_gettext.po>>>>> 4> msgmergeを実行して、新しいpotファイルと古いpotファイルを比較します。 poファイルのアップグレード版>コマンドの例:> msgmerge old_gettext.po gettext.pot --output-file gettext.po>> 5新旧のpotの違いを記録するには、diffコマンドを使用して2つのpotファイルを記録します。類似点と相違点>コマンド例:> diff -u old_gettext.po gettext.po> old_gettext.diff>>>> 6>手順4で新しいpoファイルを生成したら、元のpoファイルを削除して干渉を避けることができます。 >コマンド例:> rm -f old_gettext.po>>>>> 7新しく生成されたpoファイルからmoファイルを生成>コマンド例:> msgfmt gettext.po -o gettext.mo>>>> 8 moファイルが正しいディレクトリ構造の下に配置されている>> 9環境変数の設定>> 10新しい結果を得るためのプログラムの実行>> 3:問題への注意> 1ソースプログラムのsetlocale()関数moファイルのディレクトリ構造は一貫していなければなりません、そうでなければ正しい結果が得られません。 >> 2 poファイルを編集するときは、正しい結果を得るために、文字を移植可能なエンコードUTF-8に調整するように注意してください。それ以外の場合は、警告が発生します。>(gettext.po:warning:文字セット< CHARSET'は、移植可能なエンコーディング名ではありません。メッセージをユーザーの文字セットに変換してもうまくいかない場合があります。)>> 3 (Region)、poのコピーを複数コピーして別々に編集し、生成されたmoファイルを正しいディレクトリに置きます。 >> 4国際的にアップグレードするためにソースプログラムを修正した後は、元のプログラム(修正前)の実行ファイルを削除する必要があります。そうしないと、修正されたプログラムの結果が得られません。説明>> #include< stdio.h>> #include< locale.h> //ローカライゼーション関数を定義します。 > #include< libintl.h> //プログラムの国際化の問題を解決するためにGUNによって特別に開発されたツールとライブラリのセットであるgettextライブラリを含みます。

Copyright © Windowsの知識 All Rights Reserved