如何测试本地化的WinForms应用程序?

4

背景:

我创建了一个示例Windows应用程序来学习实现本地化。我的每个窗体都有两个RESX文件,一个是保加利亚语,一个是法语(比利时)。它的默认文化是英语(XX)。

目前为了进行本地测试,我正在以编程方式更改UICulture,即Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-BE"); 它可以正常工作。

问题:

如何在不通过编程方式强制UI Culture的情况下进行测试? 我尝试更改控制面板>区域选项>标准和格式为法语(比利时)来进行测试。 这使DatePickerControl发生了变化,并且现在显示的日期是法语。但是我仍然可以看到按钮文本是英语的,而如果我通过编程方式进行语言环境注入,则会将其更改为法语。

如果我将标准和格式更改为法语,是否仍需要安装多语言用户界面包(MUI)?

还有另外一个问题:如何在WinForms应用程序中测试本地化?但是它并没有回答我的问题。

2个回答

2
您可以使用安装有不同本地化操作系统的虚拟机,例如法语XP、日语XP等。我们使用这种方法来测试本地化,因为像您所说的,仅更改语言/时区设置是不够的。

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;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接