gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:40:18 24 4
gpt4 key购买 nike

我的 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个属性

  1. 控件名称
  2. 您要本地化的属性
  3. 本地化的值(value)

(当然,语言选择需要以某种方式/某处存储)

原因是某些控件可以通过其他方式进行本地化,而不仅仅是“文本”。 (例如,我可能想本地化图像源,或者邮政编码文本框的最大长度可能取决于语言/国家/地区)

要设置一个属性,您可以使用这样的代码。

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

这现在只处理字符串本地化,如果我确实想本地化最大长度,那么我需要做更多的工作。

我希望这能说服您走 NGPixel 建议的路线并使用数据库作为提供者。如果这太复杂,您甚至可以允许更新您的 resx 文件,显示此处 https://msdn.microsoft.com/en-us/library/gg418542(v=vs.110).aspx这样你就可以开发一个承认工具来更新你的 resx 文件和你网站的其余部分,独立使用“标准”本地化

关于c# - asp.net 中的应用程序本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34458660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com