- PR -

ASP.NET(C#) 多言語対応について

投稿者投稿内容
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2004-01-22 16:03
こんにちわ。
長文で申し訳ございませんが、設計面も含めアドバイスいただけるとありがたいです。

【前提】
現在開発予定のWebアプリケーションは
日本語・英語の2言語対応を必要としておりますが、
使用ユーザの拠点は日本と米国だけでなくアジア・欧州・中東と幅広いため、
純粋にクライアントのカルチャ(en-US等)を拾えないと思い
「ログイン画面でドロップダウン形式にて
言語の選択(日本語ja-JP or 英語en-US)をさせてセッションに保持」し、
後続の遷移先画面では
「formのラベル&エラーメッセージ等はリソースファイルを日米切り替えて対応」しようと
想定しております。

【困りの種】
@下記の2メソッドは具体的にはどのような使い分けをするべきなのでしょうか??
 カルチャの変更はこれを使用すれば可能な事はわかりましたが、
 2メソッドの差がMSDN等を見ても今ひとつ理解できません。
 リソースの切り替えだけを目的とするならCurrentUICultureメソッドだけで十分!?
 ・Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
 ・Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

A上記2メソッドはどこに組み込むのがBESTでしょうか?
 試しにボタンクリックのイベントに組み込んだところ、
 スレッドが変わる都度カルチャが初期状態(ja-JP)に戻ってしまいました。
 全画面のPage_Loadに組み込まざるをえないのでしょうか?
 global.asax.cs等で一括で行う方法等があれば・・・

BDBの項目に日本語名しかない名称項目類は、
 英名名称項目を増やし、選択された言語(日米)によって
 SQL文自体(Selectクエリ)を切り替えて表示させるしか方法は無いのでしょうか?
 (decodeを駆使する or SQL文自体を別々に持つ?)


これまで邦人専用のjava-servletアプリしか構築した経験が無く、
社内でも他に.NETをやっている部署が存在しないので、
設計の段階で困り果ててしまっております。

良きアドバイスのほどよろしくお願いいたします。
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2004-01-26 11:01
自己レス。

Bに関しては
画面&帳票に名称類を表示させる必要性のある項目については、
マスタに「日本語名称」「英語名称」と2項目保持させる方向にいたしました。
 例:品名コード・品名名称(日)・品名名称(英)

#おかげで工数が一気に膨らみました(大汗


@・Aについてはまだまだ模索調査中です・・・


#世間様ではグローバリゼーションを意識したアプリって
#あまり構築実績ってないのでしょうか・・・  これから先かなーり不安です。。。
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2004-02-03 00:32
深夜自己レスです。
スレッドを建てた身として結果まで報告します。

@について
リソースファイルへのアクセスのみを目的としているのであれば、
カルチャの設定は「Thread.CurrentThread.CurrentUICultureメソッド」で充分。

Aについて
ASP.NET(Webアプリケーション)において、
1リクエスト1スレッドで処理されるかどうかフレームワークの仕様が不明であるため、
各画面のPage_Load及び波及するクラスの先頭にて
「Thread.CurrentThread.CurrentUICultureメソッド」を実装。
スレッドプールについては
プールされて再利用されたスレッド自体のイニシャル処理が不明であるため未考慮。



#レス付かないスレって寂しいもんだねお母さん(;o;)


以上」
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-03 06:22
引用:

ロンロンさんの書き込み (2004-02-03 00:32) より:

#レス付かないスレって寂しいもんだねお母さん(;o;)


わからんand興味がないことは、レス付けようがないわな。。。今のところ、「需要がない」ということで、数ヶ月後、「これ、どうやって…」という質問がつくことを期待しましょう(^^;
Anon
常連さん
会議室デビュー日: 2003/10/20
投稿数: 29
投稿日時: 2004-02-04 13:56
ロンロンさん、はじめまして。

昨年、私も日本語・英語の2言語対応のwebアプリに
関わっていたのでBについてなら。

私がやったのは画面の表示項目、メッセージなどを
すべてconfigファイル(Xmlファイル)に出しました。
そうすることでプログラムはひとつで、
日本語用configファイル、英語用configファイルを入れ替えるだけで2言語対応を可能にしました。

もし、質問の趣旨から外れていたらごめんなさい。
ロンロン
ベテラン
会議室デビュー日: 2004/01/08
投稿数: 58
お住まい・勤務地: TOKYO
投稿日時: 2004-02-04 14:37
引用:

Anonさんの書き込み (2004-02-04 13:56) より:
すべてconfigファイル(Xmlファイル)に出しました。
そうすることでプログラムはひとつで、
日本語用configファイル、英語用configファイルを入れ替えるだけで2言語対応を可能にしました。



Anonさんこんにちわ&レスありがとうございます。
2言語ファイルとは、aaa.ja-JP.resx と aaa.en-US.resx のような形式でしょうか? 
「ファイルを入れ替える」とありますが、
どのような手段で切り替えを実現したのでしょうか??

ご参考までに教えていただければ、と思います。m(__)m
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-04 14:49
configファイルというのは.configのファイルのことではないですか?
「アプリケーション構成ファイル」と呼ばれていますが、web.configとかexeファイル名.configとか。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-02-04 15:25
今日は、Windowsでの多言語はやったことが有りますが、Webでは試したことが無いです。
しかし、大体は下記のような流れになると思います。

1.リソースファイルを作成
Webアプリは自動的にリソースファイルが作られない為、手動で作成(アツセンブリリソース)nameとvalueを登録(必要言語分)

2.そのリソースファイルよりRequestのLenguageを使いカルチャーを設定
using System.Resources;
using System.Globalization;
・・・・
protected ResourceManager RM;
・・・
page_loadで
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.UserLanguages[0]);

RM= new ResourceManager(namespace, typeof(WebForm1).Assembly);

Button1.Text = RM.GetString(リソースのname);  リソースのvalueが設定される

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