トップ回答者
VBで、地域と言語を取得する方法

質問
-
以下のコーディングにより、実行環境の地域と言語の形式を取得しようとしています。
Module Module1
Sub Main()
Dim language As String
language = Globalization.CultureInfo.CurrentCulture.Name.ToString
End Sub
End Moduleこのプログラムを実行すると、変数languageには、日本語(日本)であれば"ja-JP"、英語(米国)であれば"en-US"が返ってきます。
ところが、この地域と言語の形式を変更直後に実行すると、変更後の内容ではなく、変更前の内容が返ってきます。
更に、もう1回実行すると、今度は変更後の内容が返ってきます。
例えば、現状の形式が、日本語(日本)の状態で、以下の手順で実行すると、
①プログラムを実行する。
②日本語(日本)から英語(米国)に変更する。
③プログラムを実行する。
④再度、プログラムを実行する。
①では、"ja-JP"(期待通り)、③では"ja-JP"(期待に反する)、④では"en-US"(期待通り)
が返ってきます。なぜでしょうか。
環境は以下の通りです。
Windows 7 Professional 32ビット
.NET Framework 3.5
Visual Basic 2010 Express
回答
-
標準では Visual Studio ホストプロセス が有効に設定されてます。
デバッグを終了したとしても、プロセスとして「プロジェクト名.vshost.exe」が生き残っていますのでその中で以前のカルチャ設定が保持されていたのではないでしょうか。ホストプロセスを無効にする か、タスクマネージャーで無理矢理ホストプロセスを一度終了させると、次のデバッグから設定が反映されると思います。
(ホストプロセスを無効にするとデメリットが生じますので注意)ところで、佐祐理さんも指摘されていることですが、何を取得したかったのでしょうか。
今、見ているものは「書式設定」であり、「場所」でも「表示言語」でもありませんのでご留意ください。 -
もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?
あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。
OSのカルチャを取得したい
ひらぽん http://d.hatena.ne.jp/hilapon/
すべての返信
-
もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?
あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。
OSのカルチャを取得したい
ひらぽん http://d.hatena.ne.jp/hilapon/
-
もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?
あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。
OSのカルチャを取得したい
ひらぽん http://d.hatena.ne.jp/hilapon/
ClearCachedDataを入れても結果同じでした。ただ期待通り動作しなかったのは、Visual Studioから実行したときで、
End Subの前に、MsgBox(language)を挿入して、コマンドプロンプトから実行したら期待通り動作しました。
ひらぽんさん仰る通りでした。
「開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません」
実運用では、Visual Studioから実行することはないので、とりあえず大丈夫です。
ひらぽんさん、ありがとうございました。
-
標準では Visual Studio ホストプロセス が有効に設定されてます。
デバッグを終了したとしても、プロセスとして「プロジェクト名.vshost.exe」が生き残っていますのでその中で以前のカルチャ設定が保持されていたのではないでしょうか。ホストプロセスを無効にする か、タスクマネージャーで無理矢理ホストプロセスを一度終了させると、次のデバッグから設定が反映されると思います。
(ホストプロセスを無効にするとデメリットが生じますので注意)ところで、佐祐理さんも指摘されていることですが、何を取得したかったのでしょうか。
今、見ているものは「書式設定」であり、「場所」でも「表示言語」でもありませんのでご留意ください。 -
神後輪 さん、こんにちは、
フォーラム オペレーターの星 睦美です。今回の質問に書かれているコーディングの結果に関する疑問への回答になったのではないかと思いますので、ひらぽん さんとAzulean さんの返信を[回答の候補に設定] させていただきました。
コーディングの目的の[地域と言語] で設定されている情報の取得に関しては、佐祐理 さんからの情報を参考にしていただけるのではないかと思います。Locale and Language(地域と言語)で設定されている内容と対応したFunction (関数) が紹介されています。
フォーラムで役立つ回答がありましたら、投稿者から[回答としてマーク] いただければ幸いです。---
今回は私から[回答としてマーク] させていただきました。これからもMSDN フォーラムをお役立てください。
フォーラム オペレーター 星 睦美 - MSDN Community Support
- 編集済み 星 睦美 2014年1月27日 2:39 回答としてマーク