2010-04-16 63 views
4

背景:如何測試本地化的winforms應用程序?

我已經創建了示例windows應用程序來學習實現本地化。我的每個表格都有兩個RESX文件。一個保加利亞和一個法國(比利時)。它具有默認文化英語(XX)

要在當地進行測試,我正在以編程方式更改UICulture,即Thread.CurrentThread.CurrentUICulture = new CultureInfo(「fr-BE」);它工作正常。

問題:

如何我可以測試,而不強迫用戶界面編程文化?我嘗試將控制面板>區域選項>標準和格式更改爲法語(比利時)。這對DatePickerControl進行了更改,現在它顯示日期法語。不過,我仍然可以看到英文的Button文本,就像我通過以編程方式注入CultureInfo進行測試一樣,它會更改爲法語。

如果我能夠將標準和格式更改爲法語,我還需要安裝多語言用戶界面包(MUI)嗎?

還有另一個問題:How do I test localization in a winforms application?但它不回答我的問題。

回答

2

你可以使用虛擬機與不同的本地化OS安裝」,即法國XP,日本等XP,我們用這個方法來測試本地化,像你說的,只是改變你的語言/時區設置是不夠的。

+0

也許,該應用可能檢測時區並加載正確的文化.. – user20358 2012-12-17 08:03:44

0

爲什麼不把本地化設置放在配置文件中? 您的應用程序可以在加載時讀取配置文件,並基於此設置應用正確的設置。 然後,您需要手動處理每個字符串的本地化。

我不喜歡的東西,對於一個工具,我進行一次(在C#):

Localization.cs

using System.Globalization; 
    using System; 

    namespace DummyProject 
    { 
     public class Localization 
     { 
      private string _language = "en"; 

      public Localization() 
      { 
       if (CultureInfo.CurrentCulture.Name.StartsWith("de") == true) 
       { 
        CurrentLanguage = "de"; 
       } 
       else if (CultureInfo.CurrentCulture.Name.StartsWith("fr") == true) 
       { 
        CurrentLanguage = "fr"; 
       } 
       else if (CultureInfo.CurrentCulture.Name.StartsWith("es") == true) 
       { 
        CurrentLanguage = "es"; 
       } 
       else 
       { 
        // Default english 
        CurrentLanguage = "en"; 
       } 
      } 

      //------------------------- 

      public string CurrentLanguage 
      { 
       get 
       { 
        return _language; 
       } 
       set 
       { 
        _language = value; 
       } 
      } 

      private string GetLocalizedString(
       string pDefault, 
       string pDe = "", 
       string pFr = "", 
       string pEs = "") 
      { 
       string returnValue = pDefault; 

       switch (_language) 
       { 
        case "de": 
        returnValue = pDe; 
        break; 
       case "fr": 
        returnValue = pFr; 
        break; 
       case "es": 
        returnValue = pEs; 
        break; 
       default: 
        returnValue = pDefault; 
        break; 
       } 
       if (String.IsNullOrEmpty(returnValue) == true) 
       { 
        returnValue = pDefault; 
       } 
       return returnValue; 
      } 

      public string AboutToolStripMenuItem { get { return GetLocalizedString("A&bout", "Ü&ber", "&A Propos", "&Acerca"); } } 

      public string AutocheckForUpdateToolStripMenuItem { get { return GetLocalizedString("&Autocheck for update", "&Automatisch nach Updates suchen", "&Vérifier automatiquement les mises à jour", "&Comprobar actualizaciones automáticamente"); } } 

      public string TimeUpdater { get { return GetLocalizedString("Timer Updater", "Zum Timer-Upater", "Mettre a jour", "Actualización de temporizador"); } } 

      public string CloseToolStripMenuItem { get { return GetLocalizedString("&Close", "&Beenden", "F&ermer", "&Cerrar"); } } 
     } 
    } 

然後在你的主類:

private Localization _localization; 

    public Form1() 
    { 
     InitializeComponent(); 

     _localization = new Localization(); 

     //---- 

     // Load localization setting here 
     _localization.CurrentLanguage = "en"; 

     //---- 

     SetLocalization(); 
    } 

    private void SetLocalization() 
    { 
     aboutToolStripMenuItem.Text = _localization.AboutToolStripMenuItem; 
     autocheckForUpdateToolStripMenuItem.Text = _localization.AutocheckForUpdateToolStripMenuItem; 
     bttn_TimerUpdater.Text = _localization.TimeUpdater; 
     closeToolStripMenuItem.Text = _localization.CloseToolStripMenuItem; 
    }