- PR -

WebサービスからクライアントのCultureInfoを取得したい

1
投稿者投稿内容
re-guzy
会議室デビュー日: 2005/06/11
投稿数: 11
投稿日時: 2005-09-26 22:25
いつも参考にさせてもらってます。

早速ですが、表題の件についてアドバイスをお願いします。
アプリケーションの構成は以下のようになっています。
1.DBアクセス層
2.Webサービス層
3.ASP.net Webアプリ or Windowsアプリ

DBでは「0」または「1」として扱っているカラムを「未入荷」又は「入荷済」という
文字列に変換してDataSetに抽出して返すメソッドがDBアクセス層の中にあります。

最近仕様変更があって、3のアプリは日本語以外も対応することになり、
DataSetを抽出するときに上記の「未入荷」等をResourceManagerで取得するよう変更しました。
それからWebサービス層でクライアントのCultureInfoを取得するため以下のコードを書きました。

string clientLang = this.Context.Request.UserLanguages[0];
CultureInfo clientInfo = new CultureInfo(clientLang);
Thread.CurrentThread.CurrentUICulture = clientInfo;

Webサービスのアドレスを指定して該当のメソッドを直接起動すると
希望したとおりの結果が得られますが、それはIEの設定によるものだったのか
肝心のWebアプリ、WinアプリからWebサービスを呼び出すと
UserLanguages.Length = 0になっています。

仕方がないのでカルチャ名を渡す別のメソッドを作り、
希望通りの動作を得られましたが、いまいち納得がいきません。

上記以外の方法でクライアントのCultureInfoを取得する方法はないのでしょうか?

開発はWindowsXp Pro sp2上でVS.net 2003を使っています。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-26 23:05
こんにちは。

カルチャ関係の回答ではないのですが、すぐに思った代案をひとつ。

引用:

DBでは「0」または「1」として扱っているカラムを「未入荷」又は「入荷済」という
文字列に変換してDataSetに抽出して返すメソッドがDBアクセス層の中にあります。



この文言をそのまま表示しているという事ですよね。そして表示が変われば、ここを変更したいと。
つまりは DB アクセス層が「表示の一部」を担当しているという事ではないでしょうか。(極論かもしれませんが)

DB アクセス層か Web サービス層で「0」または「1」というのを、例えば列挙型等にするなどしてクライアントに渡し、クライアントがそれをどう扱い、どう表示するかはクライアントに任せてはどうでしょうか。

そうしないと、カルチャ以前に、Web アプリは「未入荷」「入荷済」、Windows アプリはチェックボックスのチェック有り無しに仕様変更、となった場合に困りますよね。

#追記
クライアントが日本語なのかどうかで表示を変更するのも同様の事だと思うので、上記で対応できると思います。


[ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-26 23:07 ]
Atsushi.Eno
ベテラン
会議室デビュー日: 2003/04/23
投稿数: 60
投稿日時: 2005-09-27 02:13
クライアントから渡ってきたDataSetのLocaleプロパティ(というのがあります)はクライアントのCultureInfoになっていませんか? いまいち確信は無いですが(というかMicrosoft.NETの振る舞いは覚えていない)、スキーマの中にはmsdata:Localeという属性で送られてくると思います。

# .NET2.0でmsdata:UseCurrentCultureが返ってきている、というのであれば話は別ですが

# スキーマの中…ってことは受信側の器がtyped datasetだと意味がない??
がらす
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 99
投稿日時: 2005-09-27 02:56
私も、囚人さんの意見に賛成です。

マルチランゲージのアプリにしたいのなら、DBで扱うデータはすべてCultureInfoに依存しない形にして、クライエントのアプリで表示する時にCultureInfoを反映した表示にする。そうすればCultureInfoをDBに渡す必要はなくなります。

そうすれば、(実際にあるかどうか分かりませんが)例えばインドの開発チームがヒンドゥー語版のクライエントアプリを開発する場合でも、日本語を勉強してDBの内容を読み解く必要がありません。
re-guzy
会議室デビュー日: 2005/06/11
投稿数: 11
投稿日時: 2005-09-27 21:13
囚人さん、Atsushi.Enoさん、がらすさん回答ありがとうございます。

引用:

つまりは DB アクセス層が「表示の一部」を担当しているという事ではないでしょうか。(極論かもしれませんが)


同じような処理をWebアプリとWinアプリで実装したくないがために
今回のような実装にしましたが、言われてみたらそうですね。
クライアント側で表示を工夫するように変更します。ありがとうございました。

引用:

クライアントから渡ってきたDataSetのLocaleプロパティ(というのがあります)はクライアントのCultureInfoになっていませんか?


説明不足で申し訳ありませんが、クライアント側からはDataSetを渡しません。
なのでせっかく教えて頂いたんですが、今回は使えませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)