2017-12-13 41 views
0

私のUbuntuには2つの言語があります。私は単純なプログラムを始めたいが、異なる言語でデータを入力する必要がある。私はグローバルトグルを1つの言語から別の言語に切り替えるのに疲れています。そして、私はこのコードを次のコードで自動化しようとしています:cinのロケールを変更するには

#include <locale> 
#include <clocale> 
void change_locale(bool lang) 
{ 
    std::locale delocale("de_DE.utf8"); 
    std::locale enlocale("en_AG"); 

    if (lang == true){ 
     std::cout << "set DE locale" << '\n'; 
     setlocale(LC_ALL,"de_DE.utf8"); 
     std::locale::global(delocale); 
     std::cin.imbue(delocale); 
    } 
    else { 
     std::cout << "set Eng locale" << '\n'; 
     setlocale(LC_ALL,"en_AG"); 
     std::locale::global(enlocale); 
     std::cin.imbue(enlocale); 
    } 
} 

しかし、動作しません。それがcinだけに適用されることに注意してください。それを実行可能にするには?

答えて

0

、ユーティリティをsetxkbmapで見つけました。 私は、コマンドが呼び出された2つのスクリプトを作成しました

  • de.shファイルsetxkbmap de
  • en.shファイルsetxkbmap en

し、ソースコードからそれを呼び出す

#include <locale> 
#include <clocale> 
void change_locale(bool lang) 
{ 
    std::locale delocale("de_DE.utf8"); 
    std::locale enlocale("en_AG"); 

    if (lang == true){ 
     setlocale(LC_ALL,"de_DE.utf8"); 
     std::locale::global(delocale); 
     std::cin.imbue(delocale); 
     system("de.sh"); 
    } 
    else { 
     setlocale(LC_ALL,"en_AG"); 
     std::locale::global(enlocale); 
     std::cin.imbue(enlocale); 
     system("en.sh"); 
    } 
} 
0

キーボードレイアウトを変更しているようです。残念ながら、C++ロケールはこれに影響しません。オペレーティングシステム、特にIMEサブシステムと対話する必要があります。あなたが使用していると述べてきたUbuntuのためにここにいくつかの命令があります。https://askubuntu.com/questions/813094/how-to-change-uim-ime-input-method-using-command-line-or-programmatically/967787

要旨では、UNIXドメインソケット$XDG_RUNTIME_DIR/uim/socket/uim-helperを開き、このような特定のメッセージを記述する必要があることです。

最後に
im_change_whole_desktop 
anthy 
<one blank line with trailing newline> 
関連する問題