前提・実現したいこと
C# MVC でクライアント側処理を多言語化したい。
発生している問題・エラーメッセージ
C# MVC で Web API プログラムを作成しています。
クライアント側は JavaScript (以下JSと書きます)で作成します。
このプログラムを多言語対応で作成したいと考えています。
サーバー側(C#)で多言語化するのは Resource ファイルにラベルやメッセージを登録してそれを使用するようにすれば出来るのですが、クライアント側(JS)で多言語化対応する方法に悩んでいます。
試したこと
リクエストがあったので追記します。
簡単に思いつく方法として、サーバー側で作成する cshtml ファイル内で JS タグ内に JS の変数として Resource に定義したメッセージなりを渡してあげることを考えました。
この方法はメッセージの数が少なければよいのですが、増えてくると面倒であり、ミスの元にもなります。
他に、Rails などでもよく使用する? I18n っぽく、XML 形式の Resource ファイル内のメッセージ等をビルド時に一括して JS ファイルに var 変数名 = 'メッセージ'; の形式に書き出して、言語に対応した JS ファイルを cshtml ファイルなどにインクルードする手などもありそうです。
ここまで考えて思ったのですが、これは似たような需要が他にもありそうです。
あるのならすでに誰かが解決していそうな気もします。
しかしネットで調べた範囲ではそれらしい記事が見つかりませんでした。
この問題の一般的な対策手法などがあれば教えてください。
一般的と言える手法がないようなら 2) の方法で解決してしまおうと思っています。
具体例
リクエストがあったので追記します。
クラサバなので、クライアント側でも処理を行い、ケースによってはメッセージを表示することがあります。
このとき表示するメッセージも多言語対応を行います。最も単純な手段では以下のようになります。
--- client.js ---
swicth( locale ){
case 'en-EN':
alert( 'Japanese!' );
break;
default:
alert( '日本語!' );
break;
}
ただしメッセージを表示する箇所は多数あるので、この方法では効率がとても悪くなります。そこで以下のようにします。
--- client.js (改1)---
var message = '日本語!';
swicth( locale ){
case 'en-EN':
message = 'Japanese!';
break;
default:
message = '日本語!';
break;
}
alert( message ); // メッセージの定義と表示の処理とを分離する
これでもよいのですが、メッセージはサーバーの Resource で持たせて共用した方が効率が良さそうです。
この方法を探しています。
なお、「試したこと」では以下のようなコトしています。
※「試したこと」の 1) にあたります。
--- client.cshtml (改2)---
<script type="text/javascript" src="client.js"> <script> var message = '@Resource.Japanese'; </script>--- client.js (改2)---
alert( message );
これで調子が良さそうなのですが、メッセージが増えてくると cshtml 内に書いていくのがめんd・・・大変になります。
なのでクライアントの js プログラムにサーバー側の C# から Resource のメッセージデータを効率よく渡す方法を探しています。
「試したこと」の 2) は具体的には以下のようなことです。
--- resource.resx (改3)---
<data name="Japanese"><value>日本語!</value!></data>
--- resource.en-EN.resx (改3)---
<data name="Japanese"><value>Japanese!</value!></data>
上の様なリソースファイルから以下のような js ファイルを作成します。
--- locale.js (改3)---
var message = '日本語!';
--- locale.en-EN.js (改3)---
var message = 'Japanese!';
そして以下のように利用します。
--- client.cshtml (改3)---
<script type="text/javascript" src="locale@(locale).js"> <script type="text/javascript" src="client.js"> ----- --- client.js (改3)--- alert( message ); ----- Resource ファイルから locale.js ファイルを自動で作れれば作業の誤りをなくせて作業自体も楽になります。 ただ、ここまで考えて、この自動化を自作しなくても他にすでにフレームワークがあるのではないかと思いました。回答4件
あなたの回答
tips
プレビュー