SharePoint 2013 アプリケーション ページでアセンブリ リソース ファイルを使用する
はじめに
ASP.NET Web ページでアセンブリ リソース ファイルを使用する場合、以下のフォルダーに .resx
ファイルを格納します。
-
App_GlobalResources
フォルダー -
App_LocalResources
フォルダー
ところが SharePoint アプリケーション ページの場合は、これらのフォルダーを作成できません。ではアセンブリ リソース ファイルを使う手段がないかというと、そういうわけではなく、SharePoint 2013 にマップされた Resouces
フォルダーへ格納することで使用できます。[1] 読み込む方法もちょっと変わってきますので手順を追ってみていきます。
サンプル コード
実行手順
アセンブリ リソース ファイルの追加
空の 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
といったように) 用意すれば、国際化対応のアプリケーション ページを作ることができます。
-
物理的には
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\Resources
になります。 ↩︎
Discussion