我有一个包含我们网站控件的组件项目 - 现在必须能够本地化。为网站的其余部分设置本地化不是问题(我们将.resx
文件放入App_GlobalResources
目录;一切都很简陋,但我很难找到信息如何在组件项目中本地访问资源。
App_Local[/Global]Resources
文件夹不想工作 - 我无法以主项目的方式“添加ASP.NET文件夹”。一些缩写的控制代码,完全包含在组件项目中的ThisWidget.cs
中:
namespace site.shop {
[ToolboxData("<{0}:ThisWidget runat=server></{0}:ThisWidget>")]
public class ThisWidget : WebControl {
protected override void CreateChildControls() {
if (ChildControlsCreated) { return; }
this.Controls.Clear();
Label head = new Label();
head.CssClass = "header";
// fails: ThisWidget does not exist in namespace
head.Text = System.Resources.ThisWidget.Label_head;
// fails: can't find GetLocalResourceObject
head.Text = new System.Web.UI.TemplateControl.GetLocalResourceObject("Label_head");
// fails: can't find linked or embedded resources
System.Resources.ResourceManager rm = new ResourceManager();
head.Text = Convert.ToString(rm.GetObject("Label_head"));
this.Controls.Add(head);
}
}
}
以及/ new
,System.Web.UI.TemplateControl
等的几种变体......
我宁愿不必将其编译为附属程序集,然后将其拉回(这似乎是另一种选择),因为组件项目(a)有许多相关控件,并且(b )已经某种卫星依赖,对吧?我的希望是我可以删除.resx
个文件,编译.DLL
,然后项目的其余部分就可以工作。
[编辑] 我觉得我越来越接近答案,但我还没有到那里......
任何想法?我错过了什么?
谢谢!
答案 0 :(得分:0)
哦,我越来越近了 - 我打开了ThisWidget.Designer.cs
并找到了正确的参数来调用ResourceManager()
:
ResourceManager rm = new ResourceManager("Components.App_LocalResources.ThisWidget", typeof(ThisWidget).Assembly);
head.Text = Convert.ToString(rm.GetObject("Label_head"));
似乎像魅力一样。我也意识到,因为它忽略了App_LocalResources
的特殊性,我可以把它放在任何地方,所以我创建了一个/Resources/Resx/
目录,并为每个组件的控件放入.resx
个文件用它。要更新通话,请:
ResourceManager rm = new ResourceManager("Components.Resources.Resx.ThisWidget", typeof(ThisWidget).Assembly);