如何本地化webpart标题,描述,组,QuickAdd Group中的Sandbox解决方案
-
22-10-2019 - |
题
我看过其他类似的问题(例如 这个),检查了Microsoft文档(就像所有与页面相关的文档一样 SharePoint 2010中沙盒解决方案的定位),加上其他文章(Johnwpowell 和 spbits).
无论如何,我无法解决以下问题:
在VS2010中具有SP2010沙盒解决方案,并使用仅代码的WebPart, 我如何本地化Webpart的标题,描述 (在.webpart文件中), Group,QuickAddgroup (elements.xml)?
感谢大家
补充说明:
我可以通过代码本地化功能标题和描述以及WebPart内容(例如某些标签的文本)。我也知道自定义属性,以便在用户在浏览器中编辑它们时本地化WebPart属性。
我能够在SP2007中通过一些Visual Studio Random Magic(BuildAction + CopyToOutput + CustomTool + Perswothment位置 +部署类型 +编辑清单...不要问我如何:)),但是大多数这些选项不是在沙箱解决方案中可用。
编辑
重新阅读文档后,我发现了 此注释 这至少将最后一个单词放在.webpart文件上:
只有在将本地化资源文件分别安装到文件系统中,才能将沙盒解决方案的.webpart文件中的字符串定位。在大多数情况下,您正在创建沙箱溶液,这是因为您无权在目标农场安装农场解决方案。在这种情况下,没有实用方法将.webpart文件本地化在沙盒解决方案中。这意味着Web部分库中Web零件的名称在所有语言的网站上都是相同的。
关于如何至少以编程方式执行此操作的任何提示,例如,将WebPart添加到功能事件接收器中的画廊中?
解决方案
我认为您不能安装包含资源文件作为混合方法的一部分的农场解决方案?如果可以的话,这确实会解决问题。
如果不是:(对不起,如果您已经知道这一点),您可能知道,.webpart(or.dwp)文件中引用的资源看起来像这样:“ $:corebs:core,webparttitle;”其中“核心”是指资源文件名和“ webparttitle”是指资源字符串名称。当将.webpart文件作为功能的一部分部署并通过查看根网站的语言来解决时,可以解决这些资源,因为这是Web Part Gallery的存在。这是一次仅在供应到现场的点。
在沙箱中,您只能参考服务器安装的资源文件,而不是作为沙盒解决方案的一部分部署的资源。因此,这似乎是使用像功能接收器这样的代码。在激活功能上,我建议您在Web Part Gallery(使用Spweb.getCatalog)中的WebPart文件上获取一个句柄功能接收器组件。
其他提示
我正在根据史蒂夫的答案和其他链接来建立这一链接,并采用主要步骤。这可能对下一个来的人有帮助。如果错了,请纠正。
- 将网络零件画廊作为一个与众不同的
GetCatalog(SPListTemplateType.WebPartCatalog)
- 在列表中找到与您的网络部分相对应的项目,例如匹配
SPListItem.Name
- 使用Web Part文件创建一个XMLTEXTREADER
XmlReader xmlReader = new XmlTextReader(listItem.File.OpenBinaryStream());
- 用读者创建一个xmldocument
XmlDocument xmlDoc = new XmlDocument(xmlReader)
- 基于文档创建XPathNavigator
XPathNavigator navigator = xmlDoc.CreateNavigator()
- 获取一个带有Web零件标题的单个XPathNavigator节点
XPathNavigator titleNode = navigator.SelectSingleNode(titleXPath)
, ,titlexpath是“/webparts/webpart/data/properties/property [@name = title]” - 设置其价值从本地资源 +自动化类中获取
titleNode.SetValue(MyResources.SomeClass.MyWebPartTitle)
- 重复6.和7.对于Web部件描述(XPath是“/webparts/webpart/data/properties/properties/property [@name =说明]”)
- 保存xmldocument
xmlDoc.Save()
- 将所有这些放在
FeatureReceiver.FeatureActivated
包含您网络部分的功能的方法。
在这种情况下
SPList catalog = web.GetCatalog(SPListTemplateType.WebPartCatalog);
SPQuery query = new SPQuery();
query.Query = string.Format( @"<Where><Eq><FieldRef Name='LinkFilename'/><Value Type='Computed'>{0}</Value></Eq></Where>", webPartName);
SPListItem webPartItem = catalog.GetItems(query).Cast<SPListItem>().FirstOrDefault();
webPartItem[SPBuiltInFieldId.Title] = WebPartsResources.Title;
webPartItem.Update();