2010-04-16 4 views
4

Как проверить локализованное приложение winforms?

Я создал образец окна приложения для обучения реализации локализации. В каждой моей форме есть два файла RESX. Один для Болгарии и один для французского (Бельгия). У этого есть культура по умолчанию English (XX)

Чтобы протестировать локально в настоящее время, я программно меняю UICulture, то есть Thread.CurrentThread.CurrentUICulture = new CultureInfo ("fr-BE"); И он отлично работает.

Проблема:

Как я могу проверить, не принуждая культуры пользовательского интерфейса программно? Я попытался изменить Панель управления> Региональные параметры> Стандартные и Форматы на Французский (Бельгия). Это внесло изменения в DatePickerControl и теперь отображает даты французского языка. Тем не менее, я все еще вижу текст Button на английском языке, где, как если бы я тестировал, вводя программу CultureInfo программно, он меняется на французский.

Если я могу изменить стандарт и форматы на французский, мне все еще нужно установить пакет многоязыкового интерфейса пользователя (MUI)?

Возникает другой вопрос: How do I test localization in a winforms application? Однако он не отвечает на мой вопрос.

ответ

2

Вы можете использовать виртуальные машины с различными локализованными ОС, то есть французский XP, японский XP и т. Д. Мы использовали этот метод для проверки локализации, поскольку, как вы говорите, недостаточно изменить настройки языка/часового пояса.

+0

Возможно, приложение может определить часовой пояс и загрузить правильную культуру. – user20358

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; 
    } 
Смежные вопросы