Windows 上の C++ プログラムに適切な初期ロケールを設定するにはどうすればいいですか? 質問する

Windows 上の C++ プログラムに適切な初期ロケールを設定するにはどうすればいいですか? 質問する

私はローカライズされたプログラミングにかなり不慣れで、新しく起動したアンマネージ C++ アプリケーション (アプリ内から) に適切な初期ロケールを設定する方法を理解しようとしています。

私の知る限り、新しいアプリケーションは適切な地域ロケール (英語、ドイツ語など) ではなく、C ロケールで起動します。そのため、 を呼び出す必要がありますsetlocale( LC_ALL, "???" )が、2 番目の引数の正しい値を取得する方法がわかりません。これは、"英語" または "German:Germany" のような値になります。基本的には、ユーザーがコントロール パネルの地域と言語のオプションで設定したロケールです。念のため、ないロケール文字列のフォーマット方法を探しています。アプリが実行されているコンピューターの正しいロケール文字列を探しています。

これを提供する Win32 API があるか、適切な値を含むレジストリ キーがあるのではないかと思います。どうすればいいのか知っている人はいませんか?

ベストアンサー1

setlocale() は C であり、C++ ではありません。VC6 でこの 2 つが干渉していたのを漠然と覚えていますが、それはバグでした。通常、setlocale() は C 関数の動作にのみ影響します。

C++ では、ローカリゼーションは std::locale クラスによって制御されます。デフォルトでは、ロケールに依存する操作はグローバル ロケールを使用します。グローバル ロケールは、ロケール オブジェクトをデフォルトで構築することによって取得され、std::locale::global(const std::locale&) で設定できます。

空の文字列 (std::locale("")) を使用してロケール オブジェクトを構築すると、プログラムの環境に対応するロケールが作成されます。

プログラムの起動時には、グローバル ロケールは「C」または「Classic」ロケールです。グローバル ロケールをプログラムの環境ロケールに設定するには (これが質問の内容だと思います)、次のように記述します。

std::locale::global(std::locale(""));

たとえば、私の地域設定は現在フランス語 (カナダ) に設定されています。これを実行すると、

int main(void)
{
  std::cout << std::locale().name() << std::endl;
  std::locale::global(std::locale(""));
  std::cout << std::locale().name() << std::endl;
  std::locale::global(std::locale("C"));
  std::cout << std::locale().name() << std::endl;
  return 0;
}

プリント:

C
French_Canada.1252
C

おすすめ記事