Pyを起動すると言語バーにUSキーボードが勝手に追加される

Issue #419 resolved
Former user created an issue

Windowsに言語を二つ以上使っていると認識され通知領域に切り替えボタンが表示されるので鬱陶しい。

一度英語を追加して削除し直さなければ元に戻せない模様。 Windows7・10で確認。

Comments (8)

  1. 権兵衛 七篠

    言語バーの"JP"表示を消す方法 (INTER GATE MULUMINA)ですか......
    言われてみれば確かにJPとENの二つがあがってきてますね。
    ....ぜんぜん気がつかなかった「_鈍感」もちです、七篠です。

    1.20,1.28,1.29,1.30,1.50あたりの他のエンジンでは
    こういう表示が出ないのでしょうか?
    CWPyの実行ファイル右クリックでプロパティ開いて詳細タブ見ると
    言語の欄が「日本語 (日本)」でなく「英語 (米国)」となってるのが
    少し気になるところです。
    #1.20,1.28,1.29,1.30,1.50すべて「日本語 (日本)」だったんで、
    #地味に非互換(?)な項目ではアリマス;


    じぶん正直こういうことには疎いのですが、素人なりに調べてみた感じでは
    「ロケール」なるものが関連してる、のでしょうか?
    元々Pythonは亜米利加うまれなんで標準だと「英語 (米国)」になっちゃうけれど
    文字の扱いがUnicode対応だったんで、「日本語 (日本)」と明示しなくても
    文字化けなどの問題が特に起きずそのままやってこれてしまった、
    みたいな格好なのでしょうか。

    もし、この言語の設定がキーボード問題に影響してるとすれば、
    「英語 (米国)」となってるのを「日本語 (日本)」に設定してやれば
    直感ですが、解決できそうな予感はします。

    問題はどこでどうやってやるとそのあたりの設定ができるのか、ですね.....
    ど素人が付け焼刃の知識で生半可にいじって
    何起きるかわからないのが怖いのですが、
    cardwirth.pyか、__init__.pyあたりでimport localeして
    locale.setlocale(locale.LC_ALL, ("ja_JP", "utf-8"))とか、でしょうか?
    #どなたかえらいひとへるぷorz

  2. tachi gigas

    恐れ入りますが、一人のユーザとしての発言です。

    二つ以上の言語と言いますと、通知領域の入力インジケータの件でしょうか。僕のWindows 10ではCardWirthPyの起動時ではなくWindowsの初回ログイン時に何度消しても毎回表示されます。環境依存でしょうか?申し訳ないですが、手元では再現できません。他の方も情報を寄せて下さるとk4nagatsuki様も助かると思いますので、よろしくお願いします。

    ATOK入れてるのが悪いのかも知れません。

  3. tachi gigas
    locale.setlocale(locale.LC_ALL, "jpn")
    

    を処理に挿入しても実行ファイルのプロパティは変わらなかった事は申し添えます。実行ファイルの作成はbuild_exe.pyが担っていますので、ここで設定するかと思われますが、調べ方が悪いのか、言語の設定項目が見当たりません…。

  4. k4nagatsuki repo owner

    pull request #1592

    ご迷惑をおかけして申し訳ありません。調査していただきありがとうございます。

    私が調べたところ、どうやら犯人はSDL(pygameの中の人)のようです。ディスプレイモジュールを初期化した時にUSキーボードレイアウトを追加しているように見えます。SDL2ではそうした事はしないようなのですが。

    pygameは当分アップデートされそうもないし、SDL2へ移行できそうもないので、LoadKeyboardLayoutをフックして妨害しようかとも考えましたが、それよりは安全にロードされたキーボードレイアウトがあったらアンロードをかけるようにしました。一瞬はUS設定が追加されるもののすぐに消えるという挙動になりますが、これ以上の対応はちょっと難しいです。

    pygameがSDL2へ移行するか、pygame_SDL2が使えるようになるかしたところで、この問題は本質的な解決という事になるかと思います。

  5. tachi gigas

    再現しない上で見当外れな事を申し上げて申し訳ありません。py2exeとdistutils.coreの勉強ができただけでも収穫と思うことにします…。

  6. 暗黒 騎士

    お疲れ様です。 自分もATOKですがPyのexeないしpyを起動した瞬間に入力インジケータが出てくるということが再現していましたね。(今回の修正で出なくなるのを確認)

    tachi gigasさんはおそらく言語の設定を一つにしていないのではないでしょうか?

    IME等も削除しないとおそらくその通知は消せません。

  7. k4nagatsuki repo owner

    もしかするとSDLがキーボードレイアウトを増やしてくるのは(RichTextEditでコンテキストメニューが英語になるのも)バイナリが英語設定になっているせいなのかもしれませんが、これはたぶんpy2exeのせいで、調べてみた感じ、どうやらpy2exeでロケールを指定するのは無理そうな雰囲気です。

    これに対応するにはWindowsの実行ファイルの構造について勉強する必要がありそうですね。

  8. k4nagatsuki repo owner

    当初の問題は解決したはずなので完了にしておきます。

    上の方に書いたとおり、内部的には問題は残っているのですが、これもじきに環境の改善で解決できるはずです。

  9. Log in to comment