こちらの続きです。
C#でお手軽に言語判定を行いたい - C#ATIA
昨日は久々のC#だったので、安易なコードを記載、反省しています。
あまりにVBAっぽ過ぎる・・・修正しました。
//cs //言語 private enum LanguageType { ja, en, fr, de, it, ru, zh, ko, other } //言語取得 private static LanguageType GetLanguage(INFITF.Application cat) { //実行中コマンドを中止させる Microsoft.VisualBasic.Interaction.AppActivate(cat.get_Caption()); SendKeys.SendWait("{ESC}"); SendKeys.SendWait("{ESC}"); //言語チェック var LangDic = new Dictionary<string, LanguageType>(){ {"object", LanguageType.en },//英語 {"objet", LanguageType.fr },//フランス語 {"Objekt", LanguageType.de },//ドイツ語 {"oggetto", LanguageType.it },//イタリア語 {"オブジェクト", LanguageType.ja },//日本語 {"объект", LanguageType.ru },//ロシア語 {"오브젝트", LanguageType.ko },//韓国語 {"对象", LanguageType.zh }//中国語 }; cat.ActiveDocument.Selection.Clear(); var st = cat.get_StatusBar(); var lang = LangDic.FirstOrDefault(l => st.ToUpper().Contains(l.Key.ToUpper())).Value; return lang.Equals(null) ? LanguageType.other : lang; }
この先の事を考え、戻り値となる列挙型を作成しました。
引っ掛ける文字をKeyとし列挙型をValueとするMapを作成。
LinqのFirstOrDefaultを利用し、ステータスバーの文字と照らし合わせての
言語判断にしました。
(ついでにUnicode利用できたので、各言語の"オブジェクト"で引っ掛けました)
昨日のIf文連発恥ずかしい・・・、削除したいぐらい。