【ASP.NET】マルチリンガル対応(多言語化) その2

ソースからリソースを呼び出す

Local Resource

 * GetLocalResourceObject(【キー】).ToString()

サンプル

Dim textValue As String = GetLocalResourceObject("Key").ToString()

Global Resource

 * 【リソースファイル】.【キー】
 * GetGlobalResourceObject(【キー】).ToString()

サンプル

Dim textValue1 As String = TextResources.KeyValue
Dim textValue2 As String = GetGlobalResourceObject("KeyValue").ToString()

Web.sitemapの多言語化

方法1

[1] グローバル・リソースを用意する(例:ファイル名「SiteMapResources.resource」)
[2] 以下の例にならって、Web.sitemapを修正する

<siteMapNode title="$Resources:SiteMapResources,DefaultTitle"
    description="$Resources:SiteMapResources,DefaultDescription" url="~/Default.aspx">

 * サイトマップローカライズを有効にするには、
   <siteMap>要素のenableLocalization属性をtrueに設定
 * グローバル・リソース・ファイルを取得するには
  「$Resources:ベース名,キー名」の形式で指定

方法2:複数のサイトマップ・ファイルを設置する

[1] ロケールごとのサイトマップ・ファイルを用意する
    (例:ファイル名「WebJp.sitemap」「WebEn.sitemap」)
[2] サイトマップ・ファイルをアプリケーション(Web.config)に登録する

  <siteMap enabled="true">
    <providers>
      <add name="JaSiteMapProvider"
        type="System.Web.XmlSiteMapProvider" siteMapFile="WebJp.sitemap" />
      <add name="EnSiteMapProvider"
        type="System.Web.XmlSiteMapProvider" siteMapFile="WebEn.sitemap" />

[3] ページのロード時に実行されるイベント・ハンドラで、
  サイトマップ・プロバイダを動的に変更する

    If (Request.UserLanguages(0).StartsWith("ja")) Then
      ' ロケールが“ja”の場合には“JaSiteMapProvider”をセット
      smds.SiteMapProvider = "JaSiteMapProvider"
    Else If (Request.UserLanguages(0).StartsWith("en")) Then
      ' ....