2015-09-22 104 views
1

我試圖讓本地化在我的應用程序中工作。我的解決方案中有我的ui資源文件,名爲「ui.resx」和「ui.de.resx」。但是,我的實現中的某些內容不正確,我很難過。C#本地化和資源文件

ResourceManager res_man; 
CultureInfo culture; 
string exception; 

private void myForm_Load(object sender, EventArgs e) 
{ 
    culture = CultureInfo.CreateSpecificCulture("de"); 
    res_man = new ResourceManager("MyApp.ui.resx", typeof(myForm).Assembly); 
    doTheThing(); 
} 

private void doTheThing() 
{ 
    try 
    { 
     BTN_save.text = ui.SAVE; 
     //Do code here 
    } 
    catch(Exception e) 
    { 
     exception = e.toString(); 
    } 
} 

當我運行程序時,它出現了錯誤和異常寫着:

「異常:System.Resources.MissingManifestResourceException:找不到適合指定區域性或中性文化的資源確保「ui.resx.resources」在編譯時正確嵌入或鏈接到程序集「myProgram」中,或者所有需要的附屬程序集均可加載並完全簽名。「

回答

0

您應該在類的使用全名(與命名空間)作爲第一個參數LIK:

var resman= new ResourceManager("Sample.Resources", typeof(Resources).Assembly); 

要知道什麼名字,你應該使用,開放ui.csui.resx節點下,看的命名空間類和類的名稱並使用它們,如上所示。

講究,你不應該通過"MyApp.ui.resx",而不是通過"MyApp.ui"

然後,你可以簡單地使用管理器來得到這樣的特定的文化資源:

var str = resman.GetString("YourResourceKey", culture); 

注:

你應該注意的另一件事是,有更簡單的方法來閱讀文化特定的資源。你可以簡單地設置:

var culture= ...  

System.Threading.Thread.CurrentThread.CurrentUICulture = culture; 
System.Threading.Thread.CurrentThread.CurrentCulture = culture; 

制定和文化,無論你使用例如MyApp.Ui.Key特定於文化Key的值後會被使用。

+0

我改變了行,所以它包括 新的ResourceManager(「myApp.ui.resx」,typeof(myForm).Assembly); 它仍然是錯誤的。 – Dan

+0

@dan從第一個參數中刪除.resx並傳遞「MyApp.ui」 –

+0

@Dan讓我知道它是否解決了問題。 –