C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VS2015 .net3.5 での多言語化

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■91759 / inTopicNo.1)  VS2015 .net3.5 での多言語化
  
□投稿者/ にゃるら (1回)-(2019/07/31(Wed) 14:51:32)

分類:[.NET 全般] 

No.68025が過去ログのため新しいスレで記載しておきます。
タイトルは踏襲した命名ルールでつけております。

過去のログと同様の問題が以下の環境でも発生しました。
・Windows10 64bit 日本語
・VisualStudio 2015
・Properties.Resourceでresxに英語、ja.resxに日本語のリソースを登録
・.NET Framework 3.5

VisualStudioを起動してビルドをして実行させると、日本語リソースが利用されませんでした。

・Windows7 32bit 日本語
・VisualStudio 2015
・Properties.Resourceでresxに英語、ja.resxに日本語のリソースを登録
・.NET Framework 3.5

でビルドしたものは、日本語リソースで表示されました。

# 原因はわかりませんが、当方は32bitでリリースビルドは行うため困っているわけではないです

もしも知見をお持ちの方がおられましたら、情報提供いただければと思います。

引用返信 編集キー/
■91760 / inTopicNo.2)  Re[1]: VS2015 .net3.5 での多言語化
□投稿者/ 魔界の仮面弁士 (2267回)-(2019/07/31(Wed) 15:18:17)
No91759 (にゃるら さん) に返信
> No.68025が過去ログのため新しいスレで記載しておきます。
> タイトルは踏襲した命名ルールでつけております。

No.68025 の ぽんさんと
No.91759 の にゃるらさんは、同じ方ということでしょうか?

もしも同一人物である場合には、それぞれの質問に対して
一貫して同じハンドルを使用いただけますようお願いいたします。
http://bbs.wankuma.com/index.cgi?mode=man


> 過去のログと同様の問題が以下の環境でも発生しました。
現象としては同じ事象ながら、以前のものとはバージョンが異なるというわけですね。

VS2015 + Win10x64 が手元に無いので
VS2017 + Win10x64 の場合ですが、こんな感じでしょうか?
http://www.vb-user.net/junk/replySamples/2019.07.31.15.07/resx.png


上記画像の通りだとしたら、
 『MessageBox.Show(Properties.Resources.String1);』
を実行したときの結果は、System.Threading.Thread.CurrentThread.CurrentUICulture に応じて、
日本語の場合は日本語リソースが使われました。


> VisualStudioを起動してビルドをして実行させると、日本語リソースが利用されませんでした。

出力先(bin フォルダー)配下の「exe のあるフォルダ」に、
ja-JP フォルダーあるいは ja フォルダーは存在していますか?
引用返信 編集キー/
■91762 / inTopicNo.3)  Re[2]: VS2015 .net3.5 での多言語化
□投稿者/ にゃるら (2回)-(2019/07/31(Wed) 15:52:32)
No91760 (魔界の仮面弁士 さん) に返信
> ■No91759 (にゃるら さん) に返信
>>No.68025が過去ログのため新しいスレで記載しておきます。
>>タイトルは踏襲した命名ルールでつけております。
>
> No.68025 の ぽんさんと
> No.91759 の にゃるらさんは、同じ方ということでしょうか?

いえ、異なります。

> VS2015 + Win10x64 が手元に無いので
> VS2017 + Win10x64 の場合ですが、こんな感じでしょうか?
> http://www.vb-user.net/junk/replySamples/2019.07.31.15.07/resx.png

少し異なります。

ソリューションエクスプローラでは、以下のツリーの表示でした。
Resources.ja.resx
Resources.resx
|_ Resources.Designer.cs

プロジェクトファイル(csproj)では以下の設定になっています。

<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentU
<EmbeddedResource Include="Properties\Resources.ja.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>

> 出力先(bin フォルダー)配下の「exe のあるフォルダ」に、
> ja-JP フォルダーあるいは ja フォルダーは存在していますか?

はい、jaフォルダがあります。
(アプリケーション名).resources.dllというファイルが存在します。

引用返信 編集キー/
■91764 / inTopicNo.4)  Re[3]: VS2015 .net3.5 での多言語化
□投稿者/ 魔界の仮面弁士 (2268回)-(2019/07/31(Wed) 16:21:24)
No91762 (にゃるら さん) に返信
> ソリューションエクスプローラでは、以下のツリーの表示でした。

ぽんさんは ja-JP リソースをお使いでしたが、
にゃるらさんは ja リソースなのですね。


> Resources.ja.resx
> Resources.resx
> |_ Resources.Designer.cs

Resources.ja.resx の プロパティ の
[カスタム ツール] に ResXFileCodeGenerator と記述してから
Resources.ja.resx を右クリックして「カスタムツールの実行」を選択すると
Resources.Designer.ja.cs が生成されます。

デザイナコードは Resources.Designer.cs にしか出力されないので、意味は無いですけど。


> はい、jaフォルダがあります。
> (アプリケーション名).resources.dllというファイルが存在します。

配置は問題なさそうですね。

Properties.Resources.Culture は null になっていますか?
それとも、何らかのカルチャがセットされていますか?

手元の VS2017 で実験してみた限りでは、これが 非 null の場合は
Thread.CurrentThread.CurrentUICulture で処理される見込みです。
引用返信 編集キー/
■91765 / inTopicNo.5)  Re[3]: VS2015 .net3.5 での多言語化
□投稿者/ 魔界の仮面弁士 (2269回)-(2019/07/31(Wed) 17:16:26)
2019/07/31(Wed) 17:41:15 編集(投稿者)

No91762 (にゃるら さん) に返信
> <Compile Include="Properties\Resources.Designer.cs">
>  <AutoGen>True</AutoGen>
>  <DesignTime>True</DesignTime>
>  <DependentU
> <EmbeddedResource Include="Properties\Resources.ja.resx">
>  <SubType>Designer</SubType>
> </EmbeddedResource>


部分的に削れていますが、「<DependentU」の部分は

 <DependentUpon>Resources.resx</DependentUpon>
</Compile>

のことですよね。それ以外は問題なさそうに見えます。



下記のように記述してみた場合、いずれも Resources.ja.resx ではなく
Resources.resx 側の内容が取得されてしまうのでしょうか。

var s = Properties.Resources.String1;
var x = Properties.Resources.ResourceManager.GetString("String1", null);
var y = Properties.Resources.ResourceManager.GetString("String1", new System.Globalization.CultureInfo("ja", false));
var z = Properties.Resources.ResourceManager.GetString("String1", System.Globalization.CultureInfo.InvariantCulture);



No91759 (にゃるら さん) に返信
> ・Windows7 32bit 日本語
> ・VisualStudio 2015
> ・Properties.Resourceでresxに英語、ja.resxに日本語のリソースを登録
> ・.NET Framework 3.5
> でビルドしたものは、日本語リソースで表示されました。

ここでビルドされたファイル一式を、問題の発生している
Win10 環境に持ち込み、Visual Studio を経由せずに実行した場合は
どちらのリソースで表示されるのでしょうか。

また、その逆に、Win10 側でビルドされたファイル群を
上記 Win7 で実行した場合はどうでしょうか?

その結果により、実行環境の問題なのか、それともビルドされた結果に
差異が生じているのかについて、問題の切り分けが出来るかと思います。
引用返信 編集キー/
■91766 / inTopicNo.6)  Re[4]: VS2015 .net3.5 での多言語化
□投稿者/ ????? (6回)-(2019/07/31(Wed) 17:49:56)
No91764 (魔界の仮面弁士 さん) に返信
> ■No91762 (にゃるら さん) に返信
>>ソリューションエクスプローラでは、以下のツリーの表示でした。
>
> ぽんさんは ja-JP リソースをお使いでしたが、
> にゃるらさんは ja リソースなのですね。

元スレと比べてちょいちょい違っており、すみません。
サブカルチャまで意識した多言語対応を考えていないものでして。。。

>>Resources.ja.resx
>>Resources.resx
>> |_ Resources.Designer.cs
>
> Resources.ja.resx の プロパティ の
> [カスタム ツール] に ResXFileCodeGenerator と記述してから
> Resources.ja.resx を右クリックして「カスタムツールの実行」を選択すると
> Resources.Designer.ja.cs が生成されます。
>
> デザイナコードは Resources.Designer.cs にしか出力されないので、意味は無いですけど。

いまVisualStudioがある環境がないので、明日確認してみます。

> Properties.Resources.Culture は null になっていますか?
> それとも、何らかのカルチャがセットされていますか?
>
> 手元の VS2017 で実験してみた限りでは、これが 非 null の場合は
> Thread.CurrentThread.CurrentUICulture で処理される見込みです。

これはnullでした。
そのうえで、MainのEnableVisualStylesの前にjaカルチャをProperties.Resources.Cultureに
セットすることも試したのですが、結果は変わりませんでした。
引用返信 編集キー/
■91789 / inTopicNo.7)  Re[4]: VS2015 .net3.5 での多言語化
□投稿者/ にゃるら (3回)-(2019/08/02(Fri) 14:11:14)
No91765 (魔界の仮面弁士 さん) に返信

> 部分的に削れていますが、「<DependentU」の部分は
>
>  <DependentUpon>Resources.resx</DependentUpon>
> </Compile>
>
> のことですよね。

はい、すみません。

>
> 下記のように記述してみた場合、いずれも Resources.ja.resx ではなく
> Resources.resx 側の内容が取得されてしまうのでしょうか。
>
> var s = Properties.Resources.String1;
> var x = Properties.Resources.ResourceManager.GetString("String1", null);
> var y = Properties.Resources.ResourceManager.GetString("String1", new System.Globalization.CultureInfo("ja", false));
> var z = Properties.Resources.ResourceManager.GetString("String1", System.Globalization.CultureInfo.InvariantCulture);

いずれもResources.resx 側でした。

> ■No91759 (にゃるら さん) に返信
>>・Windows7 32bit 日本語
>>・VisualStudio 2015
>>・Properties.Resourceでresxに英語、ja.resxに日本語のリソースを登録
>>・.NET Framework 3.5
>>でビルドしたものは、日本語リソースで表示されました。
>
> ここでビルドされたファイル一式を、問題の発生している
> Win10 環境に持ち込み、Visual Studio を経由せずに実行した場合は
> どちらのリソースで表示されるのでしょうか。

Resources.ja.resx です

> また、その逆に、Win10 側でビルドされたファイル群を
> 上記 Win7 で実行した場合はどうでしょうか?
 
Resources.resx です。

> その結果により、実行環境の問題なのか、それともビルドされた結果に
> 差異が生じているのかについて、問題の切り分けが出来るかと思います。

今回の件だと、「ビルドされたもの」で差異が出ているということになるんですかね?
引用返信 編集キー/
■91790 / inTopicNo.8)  Re[5]: VS2015 .net3.5 での多言語化
□投稿者/ 魔界の仮面弁士 (2275回)-(2019/08/02(Fri) 14:38:16)
No91789 (にゃるら さん) に返信
>>その結果により、実行環境の問題なのか、それともビルドされた結果に
>>差異が生じているのかについて、問題の切り分けが出来るかと思います。
> 今回の件だと、「ビルドされたもの」で差異が出ているということになるんですかね?

断定は出来ませんが、ここまでの情報を見る限りでは実行環境の問題ではなく、
ビルド時点で問題が出ているように思います。(それがビルド環境の問題なのかどうかまでは不明)

Visual Studio (あるいは Windows SDK)付属の CorFlags.exe で
それぞれの exe を開いてみた場合、何か差異はありますか?
引用返信 編集キー/
■91810 / inTopicNo.9)  Re[6]: VS2015 .net3.5 での多言語化
□投稿者/ にゃるら (4回)-(2019/08/05(Mon) 13:19:33)
No91790 (魔界の仮面弁士 さん) に返信
> Visual Studio (あるいは Windows SDK)付属の CorFlags.exe で
> それぞれの exe を開いてみた場合、何か差異はありますか?

実行結果は、以下になりました。どちらも同じ結果でした。

Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x3
ILONLY : 1
32BITREQ : 1
32BITPREF : 0
Signed : 0

win7 64bit および win10 32btiの環境を持っていないため、
それぞれでビルドしたらどうなるかは検証できていません。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ