不使用本地化选项的翻译

时间:2015-02-25 13:44:01

标签: c# class translation

我听说很多人在使用语言本地化功能方面遇到了问题,而且你只能翻译界面(就我所知,我无法翻译消息箱中的消息)。 所以我只是想知道你对我的winform app的翻译方法有什么看法。

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”,我想为我添加的每种新语言选择翻译方法。

您对如何实施更好的翻译系统有什么建议吗? 你认为我的合法或不合适吗?

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

1 个答案:

答案 0 :(得分:2)

您的本地化实施将起作用,但它会涉及大量维护,很多很多if语句,当您想要为应用程序添加其他语言选项时,需要重新访问整个代码库。您可以想象这会给您自己或应用程序的未来维护者带来的麻烦。

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

这种方法甚至可以实现消息对话文本,菜单文本,表单标题的本地化以及最重要的数值表示。 (例如,US = $ 23 432.22 vs DE = $ 23.432,22注意千位和小数分隔符的差异)

这也是关于SO的类似问题的一个非常好的解释:
How to use localization in C#