« ASP.NETでページの多言語化 | トップページ | Flex2のエフェクト »

2006年8月 9日 (水)

ASP.NETでページの多言語化 Part2

先日はリソース名と登録名を指定して多言語化するサンプルを書きましたが、コントロールのプロパティに設定することを前提に リソースの名前を設定しておくことで暗黙的に行う方法を書いてみます。

リソースに関しては同じものを使用するのですが、"Name.Property"という規則にしたがって名前をつけておきます。
例えば、Label のTextプロパティに反映したい場合は、"Label1.Text" という名前(Label1の部分は何でも構いません)にしておくと、
<asp:Label Id="Label1" runat="server" meta:resourcekey="Label1" />
と記述して先日のサンプルと同様の結果を得ることが出来ます。
meta:resourcekey に指定する値は、"Name.Property" のNameの部分のみで、Propertyの部分に記述したプロパティに値が反映されるという仕組みです。
ですので、仮に開発の途中で言語によってCSSのクラス名を変えなくてはならなくなった場合でも、Label1.CssClassという名前でリソースを追加するだけで済む、 というメリットがあります。

リソースの値をコードで取得しなければならない場合もありますが、もちろんそれも可能で、ローカルリソースの場合はGetLocalResourceObjectメソッドを、 グローバルリソースの場合はGetGlobalResourceObjectメソッドを使用します。
string text1 = GetLocalResourceObject("Label1.Text").ToString();
string text2 = GetGlobalResourceObject("WebResources", "Label1.CssClass").ToString();

また、ブラウザの設定に関わらずユーザーが言語を選択できるようにしておく必要がありますが、そのような場合はPageクラスのInitializeCultureメソッドを オーバーライドして選択されたカルチャをページに反映させます。
protected override void InitializeCulture()
{
    this.Culture = "en-us";
    this.UICulture = "en-us";

    base.InitializeCulture();
}

最後に、先日のサンプルではPageディレクティブにUICulture="auto" Culture="auto" と書きましたが、全てのページこれを記述するのは面倒だという場合は、 Web.congifファイルに、
<configuration>
    ............
    <system.web>
        ................
        <globalization uiCulture="auto" culture="auto" />
    </system.web>
</configuration>
のように記述すればOKです。

|

« ASP.NETでページの多言語化 | トップページ | Flex2のエフェクト »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12438/11347136

この記事へのトラックバック一覧です: ASP.NETでページの多言語化 Part2:

« ASP.NETでページの多言語化 | トップページ | Flex2のエフェクト »