「VC PlusPlus:MUI(Multilingual User Interface)のリソースファイルの作り方 言語別リソース」の版間の差分

提供:yonewiki
75行目: 75行目:


 という設定をしているので、他のリソースで定義されていないものがあれば、このGenerateLanguageNeutralResourceがTrueになっているリソースを参照しようとする宣言です。今回の場合は、リソース定義が当該地域に対して定義されていない場合、Resource\MultilingualApp.en-US.rcを参照しようとします。複数のリソース定義がされている中の一つにだけTrueを設定します。複数のリソースにこの子タグが設定されているとビルドエラーが発生します。こういうのが定義されているリソースファイルを<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">言語中立のリソースファイル</span>と呼びます。
 という設定をしているので、他のリソースで定義されていないものがあれば、このGenerateLanguageNeutralResourceがTrueになっているリソースを参照しようとする宣言です。今回の場合は、リソース定義が当該地域に対して定義されていない場合、Resource\MultilingualApp.en-US.rcを参照しようとします。複数のリソース定義がされている中の一つにだけTrueを設定します。複数のリソースにこの子タグが設定されているとビルドエラーが発生します。こういうのが定義されているリソースファイルを<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">言語中立のリソースファイル</span>と呼びます。
 この部分の設定はまだMUIの序章に過ぎません。そうしたいと思った程度の領域です。


 
 


[[VC_PlusPlus#記事|VC Cpp記事]]に戻る。
[[VC_PlusPlus#記事|VC Cpp記事]]に戻る。

2024年2月2日 (金) 20:19時点における版

VC Cpp記事に戻る。

概要

 MUIに関する情報はMicrosoft公式の情報が詳しいです。このSiteでもわかりやすく記事にしようと思っていますが、記事の作成には時間がかかるだろうなと思います。


 まず、日本語と英語だけのMUIを作ってみたいと思います。以下のような形式になります。


 プロジェクトの中で言語別にリソースファイル・リソーススクリプトを所持します。ここではMultilingualApp(MultilingualApp.vcxproj)というプロジェクトにMultilingualApp.exeというアプリを作成するものに対して、日本語のリソーススクリプトMultilingualApp.ja-JP.rcと英語のリソーススクリプトMultilingualApp.en-US.rcが用意されているとして説明します。


 MUIを使うとMultilingualApp.exeという実行ファイルがある階層に作られるja-JPフォルダに日本語のリソースであるMultilingualApp.exe.muiやen-USフォルダに英語リソースであるMultilingualApp.exe.muiを配置します。


 通常VisualStudioでプロジェクトにリソースを参加させた場合、プロジェクト名と同じリソースが生成されるので手動でリソースファイルの名前を変更したり、コピーを作って、言語に関する部分の変更を加えたリソースファイルを作ったりして、MultilingualApp.ja-JP.rcとMultilingualApp.en-US.rcのようなものを作成する必要があります。


 そうして、MultilingualApp.vcxprojの中身を手動で以下のように書き換えます。リソースが複数できるので、リソースはMultilingualApp.vcxprojの階層にResourceっていうフォルダを作り、その中にいれて管理します。


元のMultilingualApp.vcxprojのリソース定義部分の例

  <ItemGroup>
    <ResourceCompile Include="MultilingualApp.rc" />
  </ItemGroup>


変更後のMultilingualApp.vcxprojのリソース定義部分の例

  <ItemGroup>
    <MuiResourceCompile Include="Resource\MultilingualApp.en-US.rc">
      <FileType>Document</FileType>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">en-US</MuiCulture>
      <GenerateLanguageNeutralResource Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateLanguageNeutralResource>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">en-US</MuiCulture>
      <GenerateLanguageNeutralResource Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateLanguageNeutralResource>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">en-US</MuiCulture>
      <GenerateLanguageNeutralResource Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateLanguageNeutralResource>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Release|x64'">en-US</MuiCulture>
      <GenerateLanguageNeutralResource Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateLanguageNeutralResource>
    </MuiResourceCompile>
    <MuiResourceCompile Include="Resource\MultilingualApp.ja-JP.rc">
      <FileType>Document</FileType>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ja-JP</MuiCulture>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ja-JP</MuiCulture>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">ja-JP</MuiCulture>
      <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ja-JP</MuiCulture>
    </MuiResourceCompile>
  </ItemGroup>


 と、このようにします。一気に定義が増えましたがResourceCompileタグがMuiResourceCompileタグに変わって、二つのリソースファイル用に


  • <MuiResourceCompile Include="Resource\MultilingualApp.en-US.rc">
  • <MuiResourceCompile Include="Resource\MultilingualApp.ja-JP.rc">


という二つを定義して、その中に子タグがぶら下がっている感じになっています。子タグは


  • <MuiCulture Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">en-US</MuiCulture>


 として、en-USなら、実行環境が英語圏の地域の設定になっていれば、MultilingualApp.en-US.rcを使うという意味を持ちます。


 さらに英語のリソースファイルの子タグにだけ


  • <GenerateLanguageNeutralResource Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateLanguageNeutralResource>


 という設定をしているので、他のリソースで定義されていないものがあれば、このGenerateLanguageNeutralResourceがTrueになっているリソースを参照しようとする宣言です。今回の場合は、リソース定義が当該地域に対して定義されていない場合、Resource\MultilingualApp.en-US.rcを参照しようとします。複数のリソース定義がされている中の一つにだけTrueを設定します。複数のリソースにこの子タグが設定されているとビルドエラーが発生します。こういうのが定義されているリソースファイルを言語中立のリソースファイルと呼びます。


 この部分の設定はまだMUIの序章に過ぎません。そうしたいと思った程度の領域です。

 

VC Cpp記事に戻る。