我听说很多人在使用语言本地化功能方面遇到了问题,而且你只能翻译界面(就我所知,我无法翻译消息箱中的消息)。 所以我只是想知道你对我的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”,我想为我添加的每种新语言选择翻译方法。
您对如何实施更好的翻译系统有什么建议吗? 你认为我的合法或不合适吗?
编辑: 应用程序应该是英文,然后我可以按一个按钮使用意大利语或俄语
答案 0 :(得分:2)
您的本地化实施将起作用,但它会涉及大量维护,很多很多if语句,当您想要为应用程序添加其他语言选项时,需要重新访问整个代码库。您可以想象这会给您自己或应用程序的未来维护者带来的麻烦。
我建议您不要使用自制的,非常繁重的本地化实现,而是建议您熟悉如何在应用程序规模内使用资源文件在C#中进行本地化和全球化。可获得的完整信息here
这种方法甚至可以实现消息对话文本,菜单文本,表单标题的本地化以及最重要的数值表示。 (例如,US = $ 23 432.22 vs DE = $ 23.432,22注意千位和小数分隔符的差异)
这也是关于SO的类似问题的一个非常好的解释:
How to use localization in C#