2011-12-01 54 views
0

-EDIT 2-找出它,檢查我的答案。我應該停止問StackOverflow上的問題,我總是搞清楚一兩分鐘後:)C#本地化不起作用

我有以下代碼(當然,大致與檢測,一切都在頂部):

Manager = new ResourceManager("EM250.Localization.Application", 
           Assembly.GetExecutingAssembly()); 

// CurrentCulture being fr-CA in this case 
return Manager.GetString(Key, CurrentCulture); 

所以,我使用我製作的自定義課程管理我的本地化資源。

我得到了兩個文件,一個叫做「Application.resx」,另一個叫做「Application.fr-CA.resx」。兩者都設置爲「嵌入式資源」。當我編譯我的代碼時,我得到一個名爲「fr-CA」的文件夾,其中包含文件「Library.resources.dll」。這是完全好的。

任何人都有一個想法,爲什麼我的代碼不工作?我到處都是英文字符串。

請注意,這不是一個ASP.NET項目,而是一個實際的WinForms項目。

CNC中或許應該張貼的代碼的其餘部分,這是我的應用程序的初始化:

 String LocaleLoad; 

     if(Configuration.GetString("Language") == null) 
     { 

      // Detect which if the computer is set in french. 
      switch(System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName) 
      { 
      case "fr": 
       LocaleLoad = "fr-CA"; 
       break; 

      default: 
       LocaleLoad = "en-CA"; 
       break; 
      } 

     } 
     else 
     { 

      LocaleLoad = Configuration.GetString("Language"); 

     } 

     // Initialize the localization class. 
     Localization.Initialize(LocaleLoad); 

這是我的本地化類:

/// <summary> 
    /// Initialize the culture info with the specific culture. 
    /// </summary> 
    /// <param name="Culture">The culture to load.</param> 
    public static void Initialize(string Culture) 
    { 

     CultureInfo NewCulture = new CultureInfo(Culture); 

     if(!(Localization.CurrentCulture == null || CurrentCulture.TwoLetterISOLanguageName == NewCulture.TwoLetterISOLanguageName)) 
     { 

      CurrentCulture = NewCulture; 

      Thread.CurrentThread.CurrentCulture = NewCulture; 
      Thread.CurrentThread.CurrentUICulture = NewCulture; 

      OnCultureChanged(); 

     } 

     Thread.CurrentThread.CurrentCulture = NewCulture; 
     Thread.CurrentThread.CurrentUICulture = NewCulture; 

     CurrentCulture = NewCulture; 

     foreach(Language Lang in ListLanguages) 
     { 
      if(Lang.DisplayName == CurrentCulture.NativeName) 
      { 
       CurrentLanguageValue = Lang;  
      } 
     } 

     Manager = new ResourceManager("EM250.Localization.Application", Assembly.GetExecutingAssembly()); 

    } 

    /// <summary> 
    /// Get a single entry from the ressource file. 
    /// </summary> 
    /// <param name="Key">The value to get from the ressource file.</param> 
    public static string GetString(string Key) 
    { 

     return Manager.GetString(Key, CurrentCulture); 
    } 
+0

你在執行哪種文化? – Oded

+0

en-CA,也試圖獲得fr-CA。我有一段代碼檢測區域設置並相應地將其設置爲en-CA或fr-CA。這部分效果很好,因爲我的CurrentCulture根據我的區域設置而變化。我的應用程序選項中有一個覆蓋,這也適用。 – jValdron

+0

那麼,如果文化是'en-CA',那麼你應該得到英語。 – Oded

回答

0

我的資源ID沒有爲我的fr-CA文件設置正確。我的en-CA文件被設置爲「EM250.Localization.Application.resources」並且fr-CA是「Library.Localization.Application.fr-CA.resources」

2

如果手動設置你的文化不要別忘了設置CurrentUICulture:

Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-CA"); 

之後,正確的資源是檢索。

+0

查看我編輯的問題 – jValdron