サンドボックス ソリューションで Web パーツのタイトル、説明、グループ、quickadd グループをローカライズする方法

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/18309

質問

他の同様の質問も見ました( これです)、Microsoft のドキュメントを確認しました(ページに由来するものやページに関連するすべてのドキュメントと同様) SharePoint 2010 のサンドボックス ソリューションのローカリゼーション)、その他の記事 (ジョン・パウエル そして SPビット).

とにかく、次の問題を解決できません。

コードのみの Web パーツを備えた VS2010 に SP2010 サンドボックス ソリューションがある、 Web パーツのタイトル、説明をローカライズするにはどうすればよいですか (.webpart ファイル内)、 グループ、QuickAddGroup (要素.xml)?

みんな、ありがとう

その他の注意事項:

コードによって機能のタイトルと説明、Web パーツのコンテンツをローカライズできます (例:一部のラベルのテキスト)。ユーザーがブラウザーで Web パーツのプロパティを編集するときに、Web パーツのプロパティをローカライズするためのカスタム属性についても認識しています。

SP2007 では、Visual Studio のランダムな魔法 (BuildAction + CopyToOutput + CustomTool + 配置場所 + 配置タイプ + マニフェストの編集 ...) を使用して、これを行うことができました。方法は聞かないでください :) )が、これらのオプションのほとんどはサンドボックス ソリューションでは利用できません。

編集

ドキュメントを再読した結果、次のことに気づきました このメモ これにより、少なくとも .webpart ファイルに最後の単語が追加されます。

サンドボックス ソリューションの .webpart ファイル内の文字列は、ローカライズされたリソース ファイルがファーム ソリューションの一部としてファイル システムに個別にインストールされている場合にのみローカライズできます。サンドボックス ソリューションを作成するほとんどの状況では、ターゲット ファームにファーム ソリューションをインストールする権限がないことが原因です。このような場合、サンドボックス ソリューションで .webpart ファイルをローカライズする実際的な方法はありません。これは、Web パーツ ギャラリーの Web パーツの名前がす​​べての言語のサイトで同じであることを意味します。

これを少なくともプログラム的に行う方法に関するヒント。機能イベント レシーバーのギャラリーに Web パーツを追加することでしょうか?

役に立ちましたか?

解決

ハイブリッド アプローチの一部としてリソース ファイルを含むファーム ソリューションをインストールすることはできないと思いますか?可能であれば、これで問題は回避されます。

そうでない場合:(すでにご存知でしたら申し訳ありません) ご存知かと思いますが、.webpart (または .dwp) ファイルで参照されるリソースは次のようになります。「$リソース:コア、webparttitle;」 「core」はリソースファイル名を指し、「webparttitle」はリソース文字列名を指します。これらのリソースは、.webpart ファイルが機能の一部として展開されるときに解決され、ルート サイトには Web パーツ ギャラリーが存在するため、ルート サイトの言語を調べることによって解決されます。これは、サイトにプロビジョニングする時点で 1 回限りのヒットです。

サンドボックスでは、サーバーにインストールされたリソース ファイルのみを参照でき、サンドボックス ソリューションの一部としてデプロイされたリソースは参照できません。したがって、これを回避する唯一の方法は、Feature Receiver のようなコードを使用することのようです。機能がアクティブ化されたら、Web パーツ ギャラリーで Web パーツ ファイルのハンドルを取得し (SPWeb.GetCatalog を使用)、単純な検索と置換を実行し、次の場所に格納されているリソース文字列を探してリソース参照をプログラム的に解決することをお勧めします。フィーチャーレシーバーアセンブリ。

他のヒント

私は Steve の回答と他のリンクに基づいて、必要な主要な手順を使用してこれを構築しています。次に来る人にとっては役立つかもしれません。間違っていたら修正してください。

  1. Web パーツ ギャラリーを SPList として取得するには、 GetCatalog(SPListTemplateType.WebPartCatalog)
  2. Web パーツに対応するリスト内の項目を見つけます。マッチングすることで SPListItem.Name
  3. Web パーツ ファイルに基づいて XmlTextReader を作成します。 XmlReader xmlReader = new XmlTextReader(listItem.File.OpenBinaryStream());
  4. リーダーに基づいて XmlDocument を作成します。 XmlDocument xmlDoc = new XmlDocument(xmlReader)
  5. 次のドキュメントに基づいて XPathNavigator を作成します。 XPathNavigator navigator = xmlDoc.CreateNavigator()
  6. 次のコマンドを使用して、Web パーツ タイトルの単一の XPathNavigator ノードを取得します。 XPathNavigator titleNode = navigator.SelectSingleNode(titleXPath), ここで、titleXPath は「/webParts/webPart/data/properties/property[@name=Title]」です。
  7. ローカライズされたリソース + 自動生成クラスから取得した値を設定します。 titleNode.SetValue(MyResources.SomeClass.MyWebPartTitle)
  8. 6を繰り返します。と7。Web パーツの説明 (XPath は "/webParts/webPart/data/properties/property[@name=Description]")
  9. XmlDocument を次のように保存します。 xmlDoc.Save()
  10. これをすべて入れてください FeatureReceiver.FeatureActivated Web パーツを含む機能のメソッド。

その他のクレジットは , アンダース そして ジェームス.

この場合、Web パーツのタイトルをローカライズする簡単な方法は、リスト アイテムのタイトル フィールドを変更することです。

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();
ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top