2012-01-20 16 views
6

हमारे पास हमारे आवेदन में कुछ हज़ार स्थानीयकृत तार हैं। मैं यह सुनिश्चित करने के लिए कि प्रत्येक भाषा में डिफ़ॉल्ट (अंग्रेज़ी) resx फ़ाइल में प्रत्येक कुंजी मौजूद है, सभी कुंजी और हमारी सभी समर्थित भाषाओं के माध्यम से पुनरावृत्ति करने के लिए एक यूनिट परीक्षण बनाना चाहता हूं।यूनिट परीक्षण स्थानीय तार

मेरा विचार प्रतिबिंब का उपयोग करने के Strings वर्ग से सभी चाबियाँ प्राप्त करने के लिए है, तो एक ResourceManager का उपयोग हर भाषा में हर कुंजी के लिए लिया गया मूल्य की तुलना करने और यकीन है कि यह अंग्रेजी संस्करण से मेल नहीं खाता बनाने के लिए यह तुलना, लेकिन निश्चित रूप से, कुछ शब्द कई भाषाओं में समान हैं।

क्या यह जांचने का कोई तरीका है कि ResourceManager ने डिफ़ॉल्ट संसाधन फ़ाइल बनाम उपग्रह असेंबली से अपना मान प्राप्त किया है?

उदाहरण कॉल:

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

//compare here 

उत्तर

8

कॉल ResourceManager.GetResourceSet विधि तटस्थ और स्थानीय संस्कृतियों के लिए सभी संसाधनों को पाने के लिए, और उसके बाद दो संग्रह तुलना:

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

यह एकदम सही है, माइकल! धन्यवाद! –

संबंधित मुद्दे