Go to main content
Oracle Solaris でのアプリケーションの国際化とローカライズ

印刷ビューの終了

更新: 2016 年 11 月
 
 

システムロケールの管理

アプリケーションのロケール設定により、さまざまなロケールにおけるアプリケーションの動作方法が決定します。ロケール設定は、国際化されたアプリケーションを処理する場合のもっとも重要な設定です。ユーザーから見ると、ロケールはアプリケーションの動作の多くの側面に影響します。またプログラマの観点からは、システムが提供する多くのインタフェースの動作に影響します。適切に作成された国際化されたアプリケーションでは、ロケールを正しく設定する必要があります。

ロケールの詳細と、プログラムの動作に対する影響については、Oracle Solaris 11.3 国際化対応言語環境の利用ガイドを参照してください。


Caution

注意  -  setlocale(3C) マニュアルページに説明されているとおり、国際化されたインタフェースはすべて例外付きでマルチスレッドでの動作が安全です。インタフェースの分類の詳細は、Multithreaded Programming Guide の MT Interface Safety Levelsを参照してください。


ロケールに依存する関数

このマニュアルで説明する関数は、ロケールに依存しています。関数の出力は処理のロケールによって異なります。

C 言語のプログラムでは、ロケールは setlocale() 関数を使用して設定されます。setlocale() 関数は、ほかの機能がロケール情報を使用できるように、プログラムの最初の方で呼び出す必要があります。


注 -  プログラム内でロケールを設定しない場合、デフォルトでは、プログラムは C ロケールで実行されます。C ロケールの詳細は、C ロケールを参照してください。

ロケールの関数

システムのロケールに関連する関数は次のとおりです。

setlocale()

プログラムのロケールを設定します

localelist()

インストールされているロケールを問い合わせます

localelistfree()

localelist() 呼び出しに関連付けられたメモリーを解放します

localelist() 関数は、システムにインストールされているロケールを問い合わせるために使用します。Oracle Solaris システムに追加のロケールをインストールする方法の詳細は、Oracle Solaris 11.3 国際化対応言語環境の利用ガイドを参照してください。

詳細は、setlocale(3C)、 localelist(3C)、 localelistfree(3C)、 locale_alias(5)、 langinfo.h(3HEAD)、 nl_types.h(3HEAD)、および environ(5) のマニュアルページを参照してください。

使用例 1  プログラムのロケールの設定

次のコード抜粋部分は、ロケールを en_US.UTF-8 に設定する方法を示しています。

#include <locale.h>
      :
(void) setlocale(LC_ALL, "en_US.UTF-8");

注 -  ユーザー環境のロケール情報を使用する場合は、空の文字列 ("") を setlocale() 関数に対する引数として使用します。詳細は、setlocale(3C) および environ(5) のマニュアルページを参照してください。
使用例 2  プログラムのロケールの問い合わせ

次のコード抜粋部分は、現在のロケールを問い合わせる方法を示しています。

   
#include <locale.h>
      :
char *locale;
      :
locale = setlocale(LC_ALL, NULL);

この例では、locale 変数はプログラムの現在のロケールに設定されます。

使用例 3  ユーザー環境からのロケール設定の使用

次のコード抜粋部分は、ユーザー環境のロケール設定を使用するように env_locale 変数を設定する方法を示しています。

   
#include <locale.h>
      :
char *env_locale;
env_locale = setlocale(LC_ALL, "");

たとえば、ユーザー環境のロケールが es_ES.UTF-8 の場合、env_locale 変数は es_ES.UTF-8 に設定されます。


注 -  異なるロケールのカテゴリには異なる値が設定される (複合ロケール設定とも呼ばれる) 環境の場合、LC_ALL カテゴリを使用して setlocale 関数を呼び出すと、スラッシュ "/" で区切られた全カテゴリの値を含む文字列が返されます。例:
"/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/de_DE.UTF-8"

この文字列には、LC_CTYPELC_NUMERICLC_TIMELC_COLLATELC_MONETARYLC_MESSAGES というカテゴリが含まれています。この LC_MESSAGES は環境内で de_DE.UTF-8 に設定されています。


ロケールデータの取得と書式設定に対する関数

ロケールデータを取得および書式設定するための関数は次のとおりです。

localeconv()

数値の書式情報を取得します

nl_langinfo()

言語およびロケール情報を取得します

strftime()

日付と時間を文字列に変換します

strptime()

文字列を時間構造に変換します

strfmon()

通貨値を文字列に変換します

これらの関数は、時間の書式または通貨記号など、ロケール固有のデータの問い合わせに使用されます。この関数は、時間、数値、または通貨情報を地域の表記規則に従って書式設定するためにも使用できます。詳細は、langinfo.h(3HEAD) および mktime(3C) のマニュアルページを参照してください。

使用例 4   ロケールのコードセット名の取得

次のコード抜粋部分は、現在のプログラムのロケールの codeset を取得する方法を示しています。

#include <langinfo.h>
:
char *cs;
cs = nl_langinfo(CODESET);

この例では、C ロケールの場合、cs 変数は文字列 "646" を指しています。これは US-ASCII コードセットの別名です。コードセットの詳細は、コードセットの変換を参照してください。

使用例 5  ロケールの肯定応答文字列の問い合わせ

次のコード抜粋部分は、yesstr 変数を yes/no 文字列に設定する方法を示しています。これは現在のロケールの肯定応答に使用されます。

#include <langinfo.h>
:
char *yesstr;
yesstr = nl_langinfo(YESSTR);

たとえば、es_ES.UTF-8 ロケールでは、yesstr は文字列 を指しています。

使用例 6  ローカル時間の出力

次のコード抜粋部分は、環境に応じて設定されているロケールの地域規則に従って書式設定された現在の日付と時間を表示する方法を示しています。

#include <stdio.h>
#include <locale.h>
#include <time.h>
   :
char    *locale, ftime[BUFSIZ];
time_t  t;

locale = setlocale(LC_ALL, "");
if (locale == NULL) {
/* handle error */
}

if (0 != strftime(ftime, BUFSIZ, (char *)NULL, localtime(&t))) {
(void) printf("%s - %s\n", locale, ftime);
}