不使用本地化选项的翻译

Translations without using localization options

我听说很多人在使用语言本地化功能时遇到问题,而且您只能翻译界面(据我所知,我无法翻译来自消息框的消息)。 所以我只想知道您如何看待我翻译我的 winform 应用程序的方法。

namespace Tris
{
    class Translations
    {
        public string draws;
        public string language;
        public string help;
        public string newgame;
        public bool lang_en;
        public bool lang_it;
        public bool lang_ru;



namespace Tris
{
    class TranslationStrings
    {
        public void engTranslation(Translations TS)
        {
            TS.draws = "Draws";
            TS.language = "Language";
            TS.help = "Help";
            TS.newgame = "New Game";
            TS.lang_en = true;
            TS.lang_it = false;
            TS.lang_ru = false;


        public void rusTranslation(Translations TS)
        {
            TS.draws = "Ничья";
            TS.language = "Язык";
            TS.help = "Помощь";
            TS.newgame = "Новая Игра";
            TS.lang_en = false;
            TS.lang_it = false;
            TS.lang_ru = true;

当我需要某些东西时,我只调用正确的方法:

case 2:
    pic = Properties.Resources.end3;
    if (lang_en)
    {
        strings.winTranslationsEng(TS);
        phrase = loser + TS.win3;
        End1 end3 = new End1(lang_en, lang_it, lang_ru, winner, loser, phrase, pic);
        end3.ShowDialog();
    }
    if (lang_it)
    {
        strings.winTranslationsIta(TS);
        phrase = loser + TS.win3;
        End1 end3 = new End1(lang_en, lang_it, lang_ru, winner, loser, phrase, pic);
        end3.ShowDialog();
    }
    if (lang_ru)
    {
        strings.winTranslationsRus(TS);
        phrase = winner + TS.win1;
        End1 end1 = new End1(lang_en, lang_it, lang_ru, winner, loser, phrase, pic);
        end1.ShowDialog();
    }
    break;

之前所有的代码都是这样的:

if(lang_en)
{
    phrase="hi";
}
if(lang_it)
{
    phrase="ciao";
}

现在比以前好多了,但还是不满意。 这种管理翻译的方式让我使用了一个布尔值,所以我必须添加一个新的 "if else" 我想为我添加的每种新语言选择哪种翻译方法。

对于如何实现更好的翻译系统,您有什么建议吗? 你认为我的做法合法还是不合适?

编辑: 该应用程序应该是英文的,然后我可以按一个按钮来使用意大利语或俄语

您的本地化实施会奏效,但会涉及繁重的维护工作、大量的 if 语句以及您的 整个 代码库,当您想添加另一个时需要重新访问您的应用程序的语言选项。您可以想象这会给您自己或应用程序的未来维护者带来的麻烦。

我建议您熟悉如何在 C# 中使用资源文件在应用程序规模上进行本地化和全球化,而不是滚动一个自制的、非常繁重的本地化实现。可获得全部信息 here

此方法甚至可以本地化消息对话文本、菜单文本、表单 headers 以及最重要的值的数字表示
(例如,US = $23 432.22 vs DE = $23.432,22 注意千位和小数分隔符的区别)

这里还有一个关于 SO 的类似问题的很好的解释:
How to use localization in C#