teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

具体例を追記しました。

2018/11/21 13:46

投稿

t.kusu
t.kusu

スコア21

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,7 @@
10
10
  サーバー側(C#)で多言語化するのは Resource ファイルにラベルやメッセージを登録してそれを使用するようにすれば出来るのですが、クライアント側(JS)で多言語化対応する方法に悩んでいます。
11
11
 
12
12
  ### 試したこと
13
+ リクエストがあったので追記します。
13
14
 
14
15
  1)
15
16
  簡単に思いつく方法として、サーバー側で作成する cshtml ファイル内で JS タグ内に JS の変数として Resource に定義したメッセージなりを渡してあげることを考えました。
@@ -23,4 +24,98 @@
23
24
  しかしネットで調べた範囲ではそれらしい記事が見つかりませんでした。
24
25
 
25
26
  この問題の一般的な対策手法などがあれば教えてください。
26
- 一般的と言える手法がないようなら 2) の方法で解決してしまおうと思っています。
27
+ 一般的と言える手法がないようなら 2) の方法で解決してしまおうと思っています。
28
+
29
+ ### 具体例
30
+ リクエストがあったので追記します。
31
+
32
+ クラサバなので、クライアント側でも処理を行い、ケースによってはメッセージを表示することがあります。
33
+ このとき表示するメッセージも多言語対応を行います。最も単純な手段では以下のようになります。
34
+
35
+ --- client.js ---
36
+ swicth( locale ){
37
+ case 'en-EN':
38
+ alert( 'Japanese!' );
39
+ break;
40
+ default:
41
+ alert( '日本語!' );
42
+ break;
43
+ }
44
+
45
+ -----
46
+
47
+ ただしメッセージを表示する箇所は多数あるので、この方法では効率がとても悪くなります。そこで以下のようにします。
48
+
49
+ --- client.js (改1)---
50
+ var message = '日本語!';
51
+ swicth( locale ){
52
+ case 'en-EN':
53
+ message = 'Japanese!';
54
+ break;
55
+ default:
56
+ message = '日本語!';
57
+ break;
58
+ }
59
+ alert( message ); // メッセージの定義と表示の処理とを分離する
60
+
61
+ -----
62
+
63
+ これでもよいのですが、メッセージはサーバーの Resource で持たせて共用した方が効率が良さそうです。
64
+ この方法を探しています。
65
+
66
+ なお、「試したこと」では以下のようなコトしています。
67
+ ※「試したこと」の 1) にあたります。
68
+
69
+ --- client.cshtml (改2)---
70
+ <script type="text/javascript" src="client.js">
71
+ <script>
72
+ var message = '@Resource.Japanese';
73
+ </script>
74
+
75
+ -----
76
+
77
+ --- client.js (改2)---
78
+ alert( message );
79
+
80
+ -----
81
+
82
+ これで調子が良さそうなのですが、メッセージが増えてくると cshtml 内に書いていくのがめんd・・・大変になります。
83
+ なのでクライアントの js プログラムにサーバー側の C# から Resource のメッセージデータを効率よく渡す方法を探しています。
84
+
85
+ 「試したこと」の 2) は具体的には以下のようなことです。
86
+
87
+ --- resource.resx (改3)---
88
+ <data name="Japanese"><value>日本語!</value!></data>
89
+
90
+ -----
91
+ --- resource.en-EN.resx (改3)---
92
+ <data name="Japanese"><value>Japanese!</value!></data>
93
+
94
+ -----
95
+
96
+ 上の様なリソースファイルから以下のような js ファイルを作成します。
97
+
98
+ --- locale.js (改3)---
99
+ var message = '日本語!';
100
+
101
+ -----
102
+ --- locale.en-EN.js (改3)---
103
+ var message = 'Japanese!';
104
+
105
+ -----
106
+
107
+ そして以下のように利用します。
108
+
109
+ --- client.cshtml (改3)---
110
+ <script type="text/javascript" src="locale@(locale).js">
111
+ <script type="text/javascript" src="client.js">
112
+
113
+ -----
114
+
115
+ --- client.js (改3)---
116
+ alert( message );
117
+
118
+ -----
119
+
120
+ Resource ファイルから locale.js ファイルを自動で作れれば作業の誤りをなくせて作業自体も楽になります。
121
+ ただ、ここまで考えて、この自動化を自作しなくても他にすでにフレームワークがあるのではないかと思いました。