2009-04-28 90 views
6

我使用下面的短文添加了多語言。C#創建多語言設置

當您添加例如德語,你將有以下文件: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

在第一個文件,你將有資源對於中性語言,如字符串,圖像,...

所以,現在您需要爲代碼中使用的字符串添加資源。添加一個新的資源文件並將其命名爲Main.Strings.resx 然後,我將爲每個應該翻譯的字符串輸入名稱,值對。當您添加資源文件時,它會自動鍵入,因爲名稱爲formMain.Strings.Designer.cs的另一個文件會在每次關閉resx設計器時自動重新生成。

添加名爲formMain.Strings.de-DE.resx的另一個資源。從以前的資源中添加相同的名稱鍵,只需更改帶有相應德語單詞的值。現在從源代碼訪問創建的資源就是這樣。

MessageBox.Show(formMain_Strings.SameStringName);

但是,我已經改變了我的泰語。當我在VS中運行我的應用程序時,一切正常。

但是,只要我添加一個安裝項目並安裝在客戶端機器上,它就不會將語言更改爲泰語,只是保持默認語言。

所以我已經將資源文件和th-TH dll添加到項目設置。我仍然遇到同樣的問題。

Packaging file 'Lang.Strings.resx'... 
Packaging file 'MultiLanguage.resources.dll'... 
Packaging file 'MultiLanguage.exe'... 
Packaging file 'Lang.Strings.th-TH.resx'... 

因爲在Visual Studio中運行時一切正常。有沒有什麼我需要做的,讓它運行一旦安裝。我保留默認的每個文件的所有屬性。

非常感謝,

=========

static void Main() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

回答

10

我找到了答案

點擊Solution Explorer中的設置項目,然後單擊添加\ Project Output \。從對話框中選擇您想要包含本地化的項目(坐在精英)程序集,然後選擇本地化資源。

在我安裝到的文件夾中安裝後,我有包含衛星組件的th-TH文件夾。

謝謝,

1

嘗試在應用程序的啓動將在此(如果它不存在):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

這裏是一個short article討論如何使這項工作的一些選項,以及在運行時選擇區域設置的選項。評論後


編輯:

確保您的衛星組裝是在適當的地方,並正確建造。從這篇文章我引用:

「當.NET運行時啓動應用程序它尋找一個可能的衛星程序集文件。衛星程序集文件是一個資源只有程序集文件具有.resources.dll擴展而不是.exe ir。如果應用程序文件是Converter.exe,那麼日文衛星程序集文件是ja \ Converter.resources.dll。如果應用程序文件是Converter.exe,那麼日文衛星程序集文件是ja \ Converter.resources.dll。「

你應該在這裏檢查一些東西,檢查程序集的名稱,並確保它在正確的位置,在你的情況下,它應該位於具有合適名稱的th-TH子目錄中在你的可執行文件。如果它的存在,它應該被發現和正確使用。

這裏是another good source of information這個話題。

+0

你好。我已經添加到我的表單加載事件。在Visual Studio中一切正常。只有當我安裝在客戶端的電腦上。 public Form1() System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(「th-TH」); InitializeComponent(); } – ant2009 2009-04-28 17:05:18

+0

嘗試將它移動到Main()例程中,然後再加載表單。我相信在form_load中加載它已經太遲了...在這一點上,程序集已經被加載和選擇。 – 2009-04-28 17:07:24