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());
}

同样,我也遇到了同样的问题,我不知道控制类型,也无法将"测试"转换为正确的控制类型

你能告诉我从这里怎么走吗?感谢

asp.net中的应用程序本地化

正如评论中提到的,还有其他方法可以使翻译工作

如果你想让这项工作,你需要2是存储3属性

  1. 控件名称
  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文件和网站的其他部分