none
VBで、地域と言語を取得する方法 RRS feed

  • 質問

  • 以下のコーディングにより、実行環境の地域と言語の形式を取得しようとしています。

    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

    2014年1月15日 3:08

回答

  • 標準では Visual Studio ホストプロセス が有効に設定されてます。
    デバッグを終了したとしても、プロセスとして「プロジェクト名.vshost.exe」が生き残っていますのでその中で以前のカルチャ設定が保持されていたのではないでしょうか。

    ホストプロセスを無効にする か、タスクマネージャーで無理矢理ホストプロセスを一度終了させると、次のデバッグから設定が反映されると思います。
    (ホストプロセスを無効にするとデメリットが生じますので注意)

    ところで、佐祐理さんも指摘されていることですが、何を取得したかったのでしょうか。
    今、見ているものは「書式設定」であり、「場所」でも「表示言語」でもありませんのでご留意ください。

    • 回答の候補に設定 星 睦美 2014年1月16日 0:22
    • 回答としてマーク 星 睦美 2014年1月27日 2:36
    2014年1月15日 13:44
    モデレータ
  • もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?

    あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。

    OSのカルチャを取得したい


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答の候補に設定 星 睦美 2014年1月15日 6:22
    • 回答としてマーク 星 睦美 2014年1月27日 2:36
    2014年1月15日 3:38
    モデレータ

すべての返信

  • もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?

    あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。

    OSのカルチャを取得したい


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答の候補に設定 星 睦美 2014年1月15日 6:22
    • 回答としてマーク 星 睦美 2014年1月27日 2:36
    2014年1月15日 3:38
    モデレータ
  • NLS TerminologyにはWindowsが管理している情報の設定方法と読み出し方法が一覧されています。どの項目を読もうとしているかは把握されていますか?
    • 回答の候補に設定 星 睦美 2014年1月21日 2:04
    • 回答としてマーク 星 睦美 2014年1月27日 2:36
    • 回答としてマークされていない 神後輪 2014年2月1日 14:06
    2014年1月15日 4:15
  • もしかしたらキャッシュが残っているのかも知れません。アプリケーション終了時に CultureInfo.ClearCachedData メソッドを実行してみてはいかがでしょうか?

    あと「スレッドを開始したカルチャが引き継がれる」という話もあります。開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません。以下参考記事です。

    OSのカルチャを取得したい


    ひらぽん http://d.hatena.ne.jp/hilapon/

    ClearCachedDataを入れても結果同じでした。ただ期待通り動作しなかったのは、Visual Studioから実行したときで、

    End Subの前に、MsgBox(language)を挿入して、コマンドプロンプトから実行したら期待通り動作しました。

    ひらぽんさん仰る通りでした。

    「開発環境からデバッグ起動してもカルチャが引き継がれるのかも知れません」

    実運用では、Visual Studioから実行することはないので、とりあえず大丈夫です。

    ひらぽんさん、ありがとうございました。

    2014年1月15日 5:33
  • 標準では Visual Studio ホストプロセス が有効に設定されてます。
    デバッグを終了したとしても、プロセスとして「プロジェクト名.vshost.exe」が生き残っていますのでその中で以前のカルチャ設定が保持されていたのではないでしょうか。

    ホストプロセスを無効にする か、タスクマネージャーで無理矢理ホストプロセスを一度終了させると、次のデバッグから設定が反映されると思います。
    (ホストプロセスを無効にするとデメリットが生じますので注意)

    ところで、佐祐理さんも指摘されていることですが、何を取得したかったのでしょうか。
    今、見ているものは「書式設定」であり、「場所」でも「表示言語」でもありませんのでご留意ください。

    • 回答の候補に設定 星 睦美 2014年1月16日 0:22
    • 回答としてマーク 星 睦美 2014年1月27日 2:36
    2014年1月15日 13:44
    モデレータ
  • ところで、佐祐理さんも指摘されていることですが、何を取得したかったのでしょうか。
    今、見ているものは「書式設定」であり、「場所」でも「表示言語」でもありませんのでご留意ください。

    最初に記述した通り、地域と言語の形式です。

    もっと詳しく書くと、

    [コントロールパルル]→[地域と言語]で表示されたダイアログの[形式]タブの[形式]です。

    2014年1月18日 17:55
  • 神後輪 さん、こんにちは、
    フォーラム オペレーターの星 睦美です。

    今回の質問に書かれているコーディングの結果に関する疑問への回答になったのではないかと思いますので、ひらぽん さんとAzulean さんの返信を[回答の候補に設定] させていただきました。

    コーディングの目的の[地域と言語] で設定されている情報の取得に関しては、佐祐理 さんからの情報を参考にしていただけるのではないかと思います。Locale and Language(地域と言語)で設定されている内容と対応したFunction (関数) が紹介されています。

    フォーラムで役立つ回答がありましたら、投稿者から[回答としてマーク] いただければ幸いです。

    ---
    今回は私から[回答としてマーク] させていただきました。これからもMSDN フォーラムをお役立てください。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2014年1月27日 2:39 回答としてマーク
    2014年1月21日 2:03