将非常大的Windows解决方案转换为多语言的最佳做法是什么。
有数百个窗口有很多标签,组合等。
我们正在使用devxpress组件(而不是布局)。
答案 0 :(得分:1)
本地化总是需要大量工作,特别是如果您需要本地化已创建的应用程序。
对于表单的静态标签,有一个优雅的解决方案,可以让您轻松快速地完成75%的工作。只需将标签移动到资源,而不是触及现有的英文标签。然后,根据您当前线程的文化,更改表单上的标签,从本地化资源中读取它们。
例如,YourForm类的法语资源:
YourForm.fr-CA.resx:
"name" -> "value"
labelCaption\ --> "Légende"
labelInputLabel\ --> "Champ de saisie"
“Name”是表单控件对象的名称,“value”是控件的标签。
1)。为所有表单创建一个基类,例如LocalizationBaseForm 2)。处理此类中的OnLoad()事件并读取资源。取决于当前选择的文化,您将阅读相应的本地化资源。加拿大法语将位于/ fr-Ca /目录,西班牙语/ es-Es /等。
ResourceManager manager = new ResourceManager(your_ form_type);
ResourceSet set = manager.GetResourceSet(manager, ...);
3)。遍历标签列表并根据资源列表更改表单上的标签。
//*pseudocode:*
foreach (DictionaryEntry entry in set)
{
SetControlLabel(entry.Key, entry.Value)
}
SetControlLabel(...)方法查找具有给定名称的控件,并使用给定的新阳离子更改其标题。
您可以制作更复杂的内容,例如在网格中本地化列,使资源中的值更复杂,例如:
“name” - > “值” gridTable(ColumnKey1)\ - > “СolonneUne” gridTable(ColumnKey2)\ - > “СolonneDeux”
树木,工具栏等也是如此。你甚至可以自动生成资源,这完全取决于你。
这种方法无法解决您的所有问题,但如果您需要快速本地化现有的应用程序,它将对您有所帮助。您仍然需要本地化字符串解析器,日期等。
祝你好运!答案 1 :(得分:0)
答案 2 :(得分:0)
如果您想使用DB进行本地化,那么可以提供建议:
创建4个表 1.ProjectKeyWords(KW_ID,LNGID,Value); 2.Pages(PageID,PageName); 3.Labels(LabelID,LabelName,KW_ID); 4.Application_Labels(PageID,LabelID); 5.Langs(身份证,姓名);
样品: ProjectKeyWords 1,1,FirstName(英文) 2,1,姓氏(英文) 1,2,Имя(俄文) 2,2,Фамилия(俄文) 1,1,Adı(在阿塞拜疆) 2,1,Soyadı(在阿塞拜疆) 页面 - > 1,Form1 2,Form2
标签 - > 1,lblFirstName,1 1,lblLastName,2
Application_Labels - > 1,1 1,2 2,1 2,2
Langs - > 1,Eng 2,罗斯 3,Az
在Form_Load()事件中,您可以将SQLQuery创建为“
SELECT L.LabelName,PKW.Value
FROM Labels L,Pages P,Application_Labels A_L,ProjectKeyWords PKW
在哪里P.NAME =
AND PKW.LNG_ID =
AND A_L.PageID = P.ID
AND A_L.LabelID = L.LabelID
“
使用FindControl方法创建迭代并使用L.LabelName查找所有控件,并将PKW.Value设置为此标签文本属性