「坪」の定義を追加する
どこに何を追加すればよいのかだいたいの見当がついたので、作業していきましょう。まずは、文字列リソースから。日本語用のResources.reswファイルを開いて、定義名「UnitName_Tsubo」と「UnitAbbreviation_Tsubo」を追加します(次の画像)。値はどちらも「坪」とします。
この「電卓」アプリの既定の言語は「en-US」なので英語(en-US)用のResources.reswファイルにも、同様に追加しておきます(次の画像)。値はどちらも「Tsubo」です。これで、日本語環境のWindowsでは「坪」が、それ以外の言語環境では「Tsubo」が使われるようになります。
次に定数ですが、先ほど見つけたView ModelのUnitConverterDataLoader.cppのUnitConverterUnits::Area_SquareMillimeterのところにカーソルを置いて[F12]キーを押すと、UnitConverterUnits列挙体の定義にジャンプします(UnitConverterDataConstants.h)。このUnitConverterUnits列挙体の定義の末尾を、次のコードのように修正します。新しい定義Area_Tsuboを追加するだけでなく、UnitEndの定義も修正する必要があります。
Data_Zetabytes = UnitStart + 164, Area_Pyeong = UnitStart + 165, //UnitEnd = Area_Pyeong // 「坪」を追加↓ Area_Tsubo = UnitStart + 166, UnitEnd = Area_Tsubo
「坪」を選択肢のコレクションに読み込ませる
次に、先ほど見つけたUnitConverterDataLoader.cppのGetUnitsメソッドに、上で定義した文字列リソースを読み込むコードを追加します(次のコード)。
void UnitConverterDataLoader::GetUnits(_In_ unordered_map<ViewMode, ……省略……)
{
……省略……
vector areaUnits;
// 「坪」を追加
if (m_currentRegionCode == L"JP")
{
areaUnits.push_back(
OrderedUnit{ UnitConverterUnits::Area_Tsubo,
GetLocalizedStringName(L"UnitName_Tsubo"),
GetLocalizedStringName(L"UnitAbbreviation_Tsubo"),
16 });
}
areaUnits.push_back(
……省略……
上のコードでは、エンドユーザーがWindowsに設定した地域が日本のときだけ、「坪」を読み込むようにしています。また、OrderedUnitコンストラクターの第4引数の16というのは、選択肢の表示順です。「16」というのは、ドロップダウンの末尾になります。他の場所に表示したいときは、この「16」を書き換えるとともに、後続のpush_backメソッドに書かれている表示順を調整してください。
以上で、画面の選択肢に「坪」が追加されました。しかし、これでビルドして実行してみると、残念ながらエラーになってしまいます。
