コンソールアプリケーションの多言語対応
これがまぁ、あんまり資料がなかった。とりあえず、できた方法を書いておく。
まず、対象のプロジェクト配下に「Resources」を作成する。で、「Resources」フォルダを右クリックして、リソースファイルを追加する。
「追加」→「新しい項目」で、リソースファイルを選べば良い。
このとき、「.resx」ファイルの名前は「Language.eo.resx」というように、「Language.(カルチャコード).resx」とする。指定するカルチャコードは「TwoLetterISOLanguageName(雑訳:2文字のISO言語名)」にする。
カルチャコードは https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes を参照すること。
.resxを開くと上記のような画面になるので、エスペラント語であれば上記のように書いておく。
多言語対応する場合は、別の言語リソースファイルと同じ「名前」で、その言語の「値」を設定しなければいけない。つまり、日本語のリソースファイル「Language.ja.resx」の内容は下のようになる。
次に実装であるが、実装は下記のようになる。
※どっかのページを参考にしたのですけど、忘れた。見つけたらURLはります。
internal class LocalizeReader { private static readonly ResourceManager resourceManager = new ResourceManager("touch.Resources.Language", typeof(LocalizeReader).Assembly); private static string GetResourceValue(string resourceName) { var cultureCode = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; var culture = new CultureInfo(cultureCode); var val = resourceManager.GetString(resourceName, culture); return val; } private static string GetResourceValue(string resourceName,string CultureCode) { var culture = new CultureInfo(CultureCode); var val = resourceManager.GetString(resourceName, culture); return val; } public static string GetResourceValue(string resourceName, bool isEos) { string res = ""; if (isEos) { res = GetResourceValue(resourceName,"eo"); } else { res = GetResourceValue(resourceName); } return res; } }
おふざけ無しで、100%環境のカルチャコードで読み出すリソースファイルを分別するなら6行目のメソッドだけでいい。また、指定したカルチャコードで表示したい場合は16行目を追加すると便利。
おふざけありで、エスペラント語だけ便利に実装したい場合は24行目だけpublicとかしておくと便利。
※アクセス修飾子1)は適宜変更すること。
Console.WriteLine(LocalizeReader.GetResourceValue("msg0002", false));
このように呼び出すと絶対に日本語でメッセージが表示される。