目次

コンソールアプリケーションの多言語対応

これがまぁ、あんまり資料がなかった。とりあえず、できた方法を書いておく。

まず、対象のプロジェクト配下に「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));

このように呼び出すと絶対に日本語でメッセージが表示される。

1)
private とか publicとか