Как проверить локализованное приложение winforms? - PullRequest
4 голосов
/ 16 апреля 2010

Справочная информация:

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

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

Проблема:

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

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

Есть еще один вопрос: Как проверить локализацию в приложении winforms? Однако это не отвечает на мой вопрос.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

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

0 голосов
/ 31 июля 2013

Почему бы вам не поместить настройку локализации в файл конфигурации? Ваше приложение может прочитать файл конфигурации во время загрузки и применить правильные настройки на основе этого. Затем вам нужно вручную обработать локализацию каждой строки.

Я сделал что-то подобное для инструмента, который сделал один раз (в 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...