不使用本地化选项的翻译
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#
我听说很多人在使用语言本地化功能时遇到问题,而且您只能翻译界面(据我所知,我无法翻译来自消息框的消息)。 所以我只想知道您如何看待我翻译我的 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#