💻

SharePoint 2013 アプリケーション ページでアセンブリ リソース ファイルを使用する

2022/01/01に公開

はじめに

ASP.NET Web ページでアセンブリ リソース ファイルを使用する場合、以下のフォルダーに .resx ファイルを格納します。

  • App_GlobalResources フォルダー
  • App_LocalResources フォルダー

ところが SharePoint アプリケーション ページの場合は、これらのフォルダーを作成できません。ではアセンブリ リソース ファイルを使う手段がないかというと、そういうわけではなく、SharePoint 2013 にマップされた Resouces フォルダーへ格納することで使用できます。[1] 読み込む方法もちょっと変わってきますので手順を追ってみていきます。

サンプル コード

https://github.com/karamem0/samples/tree/main/sharepoint-farm-solution-with-resource

実装方法

アセンブリ リソース ファイルの追加

空の SharePoint プロジェクトを作成します。ソリューション エクスプローラー から 追加 - SharePoint のマップされたフォルダー をクリックします。

SharePoint のマップされたフォルダーの追加Resouces を選択します。

ソリューション エクスプローラー で追加された Resouces フォルダーから 追加 - 新しい項目 をクリックします。新しい項目の追加全般 - リソース ファイル を選択して 追加 をクリックします。

追加した .resx ファイルを開きリソースを追加します。

ApplicationPage1.aspx

新しいアプリケーション ページを作成します。

アセンブリ リソース ファイルの読み込みには SPUtility.GetLocalizedString メソッドを使用します。

<asp:Content id="Main" contentplaceholderid="PlaceHolderMain" runat="server">
    <h1><%# SPUtility.GetLocalizedString("$Resources: Message", "Resource1", SPContext.Current.Web.Language) %></h1>
</asp:Content>

ApplicationPage1.aspx.cs

コード ビハインドでは DataBind を呼び出すのを忘れないようにしてください。

public partial class ApplicationPage1 : LayoutsPageBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.DataBind();
    }
}

実行結果

デバッグしてみます。アプリケーション ページにリソース ファイルへ追加したメッセージが表示されます。

おわりに

SPUtility.GetLocalizedString メソッドはパラメーターとしてロケール ID (LCID) を渡せるようになっており、ここに SPWeb.Language プロパティを設定しています。アセンブリ リソース ファイルを各言語ごとに (たとえば ApplicationPage1.ja-jp.aspxApplicationPage1.en-us.aspx といったように) 用意すれば、国際化対応のアプリケーション ページを作ることができます。

脚注
  1. 物理的には %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\Resources になります。 ↩︎

Discussion