コンソールアプリケーションの多言語対応
これがまぁ、あんまり資料がなかった。とりあえず、できた方法を書いておく。
まず、対象のプロジェクト配下に「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));
このように呼び出すと絶対に日本語でメッセージが表示される。