asp.net中的应用程序本地化
本文关键字:应用程序 本地化 net asp | 更新日期: 2023-09-27 18:28:10
我的ASP.net项目即将结束,现在我即将完成需要翻译我的应用程序的部分。
我的想法是在我的数据库表中保留控件的ID,在页面加载时,我只是从我之前存储的Session变量中获取"LanguageID",然后简单地查询数据库,最后得到看起来像的DataTable
ControlID | Text
--------------------------------
tabAutoMail | E-MAIL PATTERN
tabUser | LOG IN
lblSignIn | Please sign in
lblinputEmail | Email address
但我现在的问题是,我不知道下一步该怎么开始。。。如果我用这种
foreach (Control ctrl in Page.Controls)
{
foreach (DataRow item in StaticTranslate.Rows)
{
if (ctrl.ID == item[0].ToString())
{
}
}
}
控件没有"文本"属性,所以如果我使用类似的东西,我就不能手动设置它
foreach (DataRow item in StaticTranslate.Rows)
{
var Test = this.Page.FindControl(item[0].ToString());
}
同样,我也遇到了同样的问题,我不知道控制类型,也无法将"测试"转换为正确的控制类型
你能告诉我从这里怎么走吗?感谢
正如评论中提到的,还有其他方法可以使翻译工作
如果你想让这项工作,你需要2是存储3属性
- 控件名称
- 要本地化的属性
- 本地化值
(当然,语言选择需要以某种方式/某处存储)
原因是某些控件可以通过其他方式进行本地化,而不仅仅是"文本"。(例如,我可能想本地化图像源,或者邮政编码文本框的最大长度可能取决于语言/国家)
若要设置属性,则可以使用以下代码。
foreach (DataRow item in StaticTranslate.Rows)
{
var control = this.Page.FindControl(item["ControlName"].ToString());
var property = control .GetType().GetProperty(item["PropertyName"].ToString());
property.SetValue(control, item["LocalizedValue"].ToString());
}
现在这只涉及字符串本地化,如果我确实想本地化maxlength,那么我需要做更多的工作。
我希望这能说服你走NGPixel建议的路线,并使用DB作为提供商。如果这太复杂了,你甚至可以允许你的resx文件在这里更新https://msdn.microsoft.com/en-us/library/gg418542(v=vs.110).aspx这样,您就可以开发一个许可工具,使用"标准"本地化独立更新您的resx文件和网站的其他部分