2017-10-25 6 views
0

私はC++を勉強していますが、私はこのC++ライブラリの機能を見つけました: setlocalehttp://www.cplusplus.com/reference/clocale/setlocale/)しかし、私はそれが何であるのか理解できません。setlocale()とは何ですか?

私はUbuntuの上で使用している:

printf ("Locale is: %s\n", setlocale(LC_ALL,""));

をそれがLocale is: en_US.UTF-8

を出力しますが、MacOSでそれが印刷さ:

Locale is: CをこのC手段を何?

どのようなコンテキストでどのように使用する必要がありますか?

+1

http:// wwwから通貨、日付、その他の地域固有の入力解釈 –

+0

に関連しているようです。cplusplus.com/reference/clocale/ "C"ロケールは最小ロケールです。それはすべてのシステムとコンパイラで同じ設定を持つかなりニュートラルなロケールであるため、このロケールを使用するプログラムの正確な結果は予測可能です。これは、デフォルトですべてのCプログラムで使用されるロケールです –

答えて

0

ロケール固有の設定です。例えば、いくつかの国ではカンマが小数点区切り記号に使用され、他の記号ではドットが使用されます。米国では、22,001は22,000と理解されることがありますが、22ポイントのヨーロッパの国では001.

となります。日付は、DD/MM/YYYYY(ヨーロッパのほとんど)またはMM/DD/YYYY米国の)フォーマットなどを含む。

+0

どのコンテキストでどのように使用する必要がありますか? – Lilli

+0

異なる慣習を使用する場所でプログラムを実行する場合。 – drescherjm

1

Linuxの場合setlocale(3)およびlocale(7)のマニュアルページをお読みください。ウィキペディアinternationalization and localizationもお読みください。

DebianとUbuntuでは、より多くのロケールを追加するためにdpkg-reconfigure localesを(ルートとして)実行することができます。

次に、LANG(およびLC_ALLなど)の環境変数(environ(7)を参照)を設定してメッセージの言語を変更できます。

たとえば、フランス語のUTF-8ロケールがインストールされています。私は

% env LC_ALL=fr_FR.UTF-8 ls /tmp/nonexisting 

をすれば、私はフランス語でエラーメッセージが出てい:

ls: impossible d'accéder à '/tmp/nonexisting': Aucun fichier ou dossier de ce type 

私は(デフォルト1である)Cロケールを使用している場合は、それが英語である:

% env LC_ALL=C ls /tmp/nonexisting 
ls: cannot access '/tmp/nonexisting': No such file or directory 

このフォーラムに表示されているコマンドを実行する前に、たとえば、コンパイラまたはシェルからのエラーメッセージを表示したくない場合は、大まかにはexport LC_ALL=C LANG=Cにします。フランス語)。

あなたはあなたが国際化したいプログラムをコーディングしている場合(ez.g.だけフランス語や中国語を理解する人々によって簡単に使用できるように)、あなたは少なくともgettext(3)を使用する必要があります(特にprintf書式指定文字列のため!)おそらくtextdomain(3)であり、メッセージカタログを扱うにはmsgfmt(1)を使用する必要があります。もちろん、翻訳されたメッセージのカタログを作成する必要があります。

ローカリゼーションは、数字の解析方法や印刷方法(カンマやドットで千または10進数字で区切る)、および金額と時間の印刷と解析方法(例:strftime(3))にも影響します。

関連する問題