C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: IHttpHandlerクラスでの多言語化について


(過去ログ 98 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■58389 / inTopicNo.1)  IHttpHandlerクラスでの多言語化について
  
□投稿者/ taro (1回)-(2011/04/01(Fri) 15:29:23)

分類:[ASP.NET (C#)] 

こんにちは。

ASP.NETでの多言語化について相談させてください。
環境はASP.NET, .NetFramework3.5です。

IHttpHandlerを継承したクラスで、多言語化した文字列を取得したいと思っています。

今までASP.NETのコード上では、以下のような方法で多言語対応した文字列を取得していました。

string text = (string)HttpContext.GetGlobalResourceObject("MyResources", "Message");

同じことをIHttpHandlerを継承したクラスで実行したところ、ブラウザで指定した言語ではなく、
デフォルトの文字列が取得されてしまいました。

検索の方法が悪いのかもしれませんが、なかなか有効な情報を得ることができません。

原因や対処方法についてご教授いただけないでしょうか。
よろしくお願いいたします。

--------
    public class MyHandler : IHttpHandler, IReadOnlySessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            string text = (string)HttpContext.GetGlobalResourceObject("MyResources", "Message");
            byte[] bs = Encoding.UTF8.GetBytes(text
                );
            context.Response.OutputStream.Write(bs, 0, bs.Length);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
---------

引用返信 編集キー/
■58395 / inTopicNo.2)  Re[1]: IHttpHandlerクラスでの多言語化について
□投稿者/ taro (2回)-(2011/04/01(Fri) 17:24:45)
さらに調べてみて、以下の方法でブラウザで指定した言語を取得することができました。
(resgenを使って、resxファイル⇒resourcesファイルに変換しました。)

HttpContextから取得できない理由は、IHttpHandlerでは、Pageほど多くの機能が実装されていないため…?
と考えています。

これが正答かどうかわかりませんが…
もっと簡単に取得できるなど、ご意見ありましたら、よろしくお願いいたします。

---------
    public class MyHandler : IHttpHandler, IReadOnlySessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            string lang = context.Request.UserLanguages[0];
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(lang);
            Thread.CurrentThread.CurrentUICulture =
              Thread.CurrentThread.CurrentCulture;
            ResourceManager objRm =
              ResourceManager.CreateFileBasedResourceManager(
                "MyResources", context.Server.MapPath("./"), null);

            string message = objRm.GetString("Message");

            byte[] bs = Encoding.UTF8.GetBytes(message);
            context.Response.OutputStream.Write(bs, 0, bs.Length);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
----------

引用返信 編集キー/
■58397 / inTopicNo.3)  Re[2]: IHttpHandlerクラスでの多言語化について
□投稿者/ taro (3回)-(2011/04/01(Fri) 19:37:46)
さらに調べました。
以下の方法ですと、resxファイルをresourcesファイルに変換することなく、
ローカル言語を取得できました。

以下、IHttpHandlerを継承したクラス内の処理です。
----------
            string lang = context.Request.UserLanguages[0];
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(lang);
            Thread.CurrentThread.CurrentUICulture =
              Thread.CurrentThread.CurrentCulture;

            string text = (string)HttpContext.GetGlobalResourceObject("MyResources", "Message");
----------

これで解決としたいと思います。
ありがとうございました!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -