2012-01-20 19 views
6

アプリケーションには数千のローカライズされた文字列があります。すべてのキーとすべてのサポートされている言語を反復処理する単体テストを作成して、すべての言語にデフォルト(英語)のresxファイルにあるすべてのキーが存在することを確認します。ローカライズされた文字列のユニットテスト

Reflectionを使用してStringsクラスのすべてのキーを取得し、ResourceManagerを使用して、すべてのキーの検索された値をすべての言語で比較し、比較して英語版と一致しないことを確認し、もちろん、いくつかの言葉は複数の言語にわたって同じです。

ResourceManagerがデフォルトのリソースファイルに対してサテライトアセンブリからその値を取得したかどうかを確認する方法はありますか?

例コール:

string en = resourceManager.GetString("MyString", new CultureInfo("en")); 
string es = resourceManager.GetString("MyString", new CultureInfo("es")); 

//compare here 

答えて

8

コールResourceManager.GetResourceSet方法は、中性およびローカライズされた文化のためのすべてのリソースを取得した後、2つのコレクションを比較する:

ResourceManager resourceManager = new ResourceManager(typeof(Strings)); 
IEnumerable<string> neutralResourceNames = resourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false) 
    .Cast<DictionaryEntry>().Select(entry => (string)entry.Key); 
IEnumerable<string> localizedResourceNames = resourceManager.GetResourceSet(new CultureInfo("es"), true, false) 
    .Cast<DictionaryEntry>().Select(entry => (string)entry.Key); 

Console.WriteLine("Missing localized resources:"); 
foreach (string name in neutralResourceNames.Except(localizedResourceNames)) 
{ 
    Console.WriteLine(name); 
} 

Console.WriteLine("Extra localized resources:"); 
foreach (string name in localizedResourceNames.Except(neutralResourceNames)) 
{ 
    Console.WriteLine(name); 
} 
+0

これは、マイケル完璧です!ありがとうございました! –

関連する問題