からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

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

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

サンプル コード

github.com

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

空の 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.aspx、ApplicationPage1.en-us.aspx といったように) 用意すれば、国際化対応のアプリケーション ページを作ることができます。

*1:物理的には %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\Resources になります。