メインコンテンツまでスキップ

多言語対応

概要

Next Design の表示言語の切り替えに連動して、エクステンションの表示言語も切り替わるように、多言語対応できます。
なお、エクステンションの多言語対応は任意です。多言語対応が不要な場合、以下の対応は必要ありません。

エクステンションの多言語対応には次の実装が必要です。

  • ロケールファイルの作成
  • 文字列のグローバライズ

ロケールファイルの作成

表示言語ごとのリソース文字列を定義したファイルを ロケールファイル と呼びます。
マニフェストが存在するフォルダに、次の名前でロケールファイルを追加することで、表示言語ごとにリソース文字列を定義できます。

表示言語ファイル名
日本語locale.ja.json
英語locale.en.json
注記
  • ロケールファイルの文字コードには UTF-8 を使用してください。

実装例

locale.ja.json

{
"locale": "ja",
"resourceStrings" : {
"MyExt.Tab.Label": "エクステンション",
"MyExt.ValidationGroup.Label": "モデル検証",
"MyExt.ValidationButton.Label": "検証",
"MyExt.ValidationButton.Description": "全モデルを検証します。",
"MyExt.Error.CanNotBeEmpty.Title": "空にできない",
"MyExt.Error.CanNotBeEmpty.Message": "名前フィールドは空にできません",
"MyExt.Error.CanNotChange.Message2": "{0}は{1}にできません"
}
}

locale.en.json

{
"locale": "en",
"resourceStrings" : {
"MyExt.Tab.Label": "Extension",
"MyExt.ValidationGroup.Label": "Model Validation",
"MyExt.ValidationButton.Label": "Validate",
"MyExt.ValidationButton.Description": "Validate all models.",
"MyExt.Error.CanNotBeEmpty.Title": "Can't be empty.",
"MyExt.Error.CanNotBeEmpty.Message": "Name field can't be empty.",
"MyExt.Error.CanNotChange.Message2": "Can't set {0} to {1}."
}
}

文字列のグローバライズ

多言語対応のために実装コードを追加・変更することを グローバライズ と呼びます。
ロケールファイルから表示箇所に対応するリソース文字列を取得するロジックを実装コードに追加・変更することでグローバライズを実現できます。

マニフェスト

マニフェスト内でのグローバライズには、ロケールファイルで定義したリソース文字列を %リソース文字列の識別子% のように指定します。

実装例

manifest.json

{
"extensionPoints": {
"ribbon": {
"tabs": [
{
"id": "MyExtensions.Tab",
"label": "%MyExt.Tab.Label%",
"groups": [
{
"id": "MyExtensions.ValidationGroup",
"label": "%MyExt.ValidationGroup.Label%",
"controls": [
{
"type": "Button",
"id": "MyExtensions.ValidationButton",
"label": "%MyExt.ValidationButton.Label%",
"description": "%MyExt.ValidationButton.Description%",
"imageLarge": "resources/icon.png",
"command": "Validate.Run"
}
]
}
]
}
]
}
},
}

ハンドラ

ハンドラ内でのグローバライズには、ロケールファイルで定義したリソース文字列の識別子を引数に設定して次のAPIを使用します。

リソース文字列取得のAPI

public interface IContext
{
// 現在の表示言語のリソース文字列を取得する
string GetResourceString(string key);
string GetResourceString1(string key,object param1);
string GetResourceString2(string key,object param1,object param2);
string GetResourceString3(string key,object param1,object param2,object param3);
}

実装例

単純なリソース文字列

var message = context.GetResourceString("MyExt.Error.CanNotBeEmpty.Message");
model.AddError("Name","Error",null,message);

パラメータ埋め込み型のリソース文字列

var message = context.GetResourceString2("MyExt.Error.CanNotChange.Message2","aaa","bbb");
model.AddError("Name","Error",null,message);
注記
  • ロケールファイルに該当するリソース文字列名の識別子が存在しない場合は、リソース文字列の識別子がそのまま表示されます。