2010-04-16 66 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; 
    }