質問編集履歴
1
情報の追加\(EXEとは別のフォルダに配置したDLL内でのThread\.CurrentThread\.CurrentUICulture\)
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Visual C#のWindows Formsでアプリケショーンを作成しています。
|
4
4
|
|
5
|
-
次のサイトを参考にしながら、EXEファイルとは別のフォルダに配置したDLLを参照するアプリケーションを作成しています(DLLをプラグインとして後から追加可能とするため。)
|
5
|
+
次のサイトを参考にしながら、EXEファイルとは別のフォルダ(サブフォルダではい)に配置したDLLを参照するアプリケーションを作成しています(DLLをプラグインとして後から追加可能とするため。)
|
6
6
|
|
7
7
|
- [exeと別フォルダのDLLを参照する方法 : 3流プログラマのメモ書き](http://jehupc.exblog.jp/7662361/)
|
8
8
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
次にこのアプリケーションを多国語に対応させるために、EXE内に定義したフォームと、EXEとは別のフォルダに配置したDLL内に定義したフォーム各々のLanguageプロパティにおいて「日本語」等のローカライズ言語を指定してその言語のUIを作成し、Language=(既定値)のフォームには英語のUIを作成しましたが、次節のような問題が発生しており多言語対応がうまくいきません。
|
18
18
|
|
19
|
-
そこで標題の件ですが、EXEファイルとは別のフォルダに配置したDLLに於いてLanguage=(既定値)以外の言語に対応させるにはどうしたらよいのでしょうか?
|
19
|
+
そこで標題の件ですが、EXEファイルとは別のサブフォルダではないフォルダに配置したDLLに於いてLanguage=(既定値)以外の言語に対応させるにはどうしたらよいのでしょうか?
|
20
20
|
|
21
21
|
|
22
22
|
|
@@ -136,7 +136,7 @@
|
|
136
136
|
|
137
137
|
```
|
138
138
|
|
139
|
-
- EXEとは別フォルダ(C:\Bar\Plugins
|
139
|
+
- EXEとは別フォルダ(C:\Bar\Plugins)に配置するDLL(Fuga.dll)のプロジェクト内のコード
|
140
140
|
|
141
141
|
(DLLFormのGUIはデザイナ上で「Language=(既定値)」と「Language=日本語」の2種類を作成。(既定値)のときは英語とする)
|
142
142
|
|
@@ -278,9 +278,55 @@
|
|
278
278
|
|
279
279
|
|
280
280
|
|
281
|
+
---
|
282
|
+
|
283
|
+
**2016年9月8日 追加**
|
284
|
+
|
285
|
+
EXEファイルとは別のフォルダに配置したDLLで Thread.CurrentThread.CurrentUICulture の値を調べてみました。同DLLのフォーム(DLLForm)にTextBoxを二つ貼り付けて、次のコードで検証
|
286
|
+
|
287
|
+
```C#
|
288
|
+
|
289
|
+
textBox1.Text = Thread.CurrentThread.CurrentUICulture.TextInfo.CultureName;
|
290
|
+
|
291
|
+
textBox2.Text = Thread.CurrentThread.CurrentUICulture.ToString();
|
292
|
+
|
293
|
+
```
|
294
|
+
|
295
|
+
[結果]
|
296
|
+
|
297
|
+
EXE側で、Fuga.DLLForm frm = new Fuga.DLLForm();する前に
|
298
|
+
|
299
|
+
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ja");
|
300
|
+
|
301
|
+
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ja");
|
302
|
+
|
303
|
+
としたとき
|
304
|
+
|
305
|
+
```
|
306
|
+
|
307
|
+
textBox1: ja-JP
|
308
|
+
|
309
|
+
textBox2: ja
|
310
|
+
|
311
|
+
```
|
312
|
+
|
313
|
+
同じく(中略)CultureInfo.GetCultureInfo("ja-JP");としたとき
|
314
|
+
|
315
|
+
```
|
316
|
+
|
317
|
+
textBox1: ja-JP
|
318
|
+
|
319
|
+
textBox2: ja-JP
|
320
|
+
|
321
|
+
```
|
322
|
+
|
323
|
+
試しにDLLFormのLanguageプロパティを「日本語 (日本)」にした版も用意してみましたが、相変わらず(既定値)のUIが表示されてしまう状況です。
|
324
|
+
|
325
|
+
|
326
|
+
|
281
327
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
282
328
|
|
283
|
-
開発環境は以下の通りです。
|
329
|
+
- 開発環境は以下の通りです。
|
284
330
|
|
285
331
|
Visual Studio Professional 2013
|
286
332
|
|
@@ -289,3 +335,13 @@
|
|
289
335
|
Windows Form
|
290
336
|
|
291
337
|
DLLのプラグイン化にはMEF(Managed Extensibility Framework)を使用していますが、MEFを用いていなくても同問題が発生します。
|
338
|
+
|
339
|
+
- 残念ながら…
|
340
|
+
|
341
|
+
今回は時間切れと言うことで、EXEファイルと同じ階層にプラグイン用のサブフォルダを作ってそこにDLLを配置して、probingで参照する仕様に変更となりました。
|
342
|
+
|
343
|
+
[ランタイムがアセンブリを検索する方法 - msdn](https://msdn.microsoft.com/ja-jp/library/yx7xezcf.aspx)
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
(この方法であれば期待通りの言語で表示されるのですが「前提・実現したいこと」の解決とは少し異なります)
|