Visual Studioの拡張機能を多言語化する

[Visual Studio Advent Calendar 2014](http://qiita.com/advent-calendar/2014/vs)の22日目です。

みなさん、はじめまして！ 窓辺ありにゃん（まどべ ありにゃん）です。アドベントカレンダー自体も初めてです。C#や.NETやVisual Studioが大好きで、プログラミングをやっています。

本来は自サイトで公開する予定でしたが、自サイト開設が間に合わなかったので、Qiitaで公開することにしました。自サイトを開設したら、この記事も移管する予定です。

* * *

自分で作ったVisual Studioの拡張機能を海外でも使ってもらいたいですよね？ 拡張機能のマニフェスト自体を英語で記述するのも手ですが、逆に日本人にとって使いづらくなってしまいます。

Visual Studioの拡張機能には言語に応じて拡張機能のタイトル、説明、ライセンスを表示する機能があるんですよ！ しかし、現時点ではVSIX Language Pack用のテンプレートが存在しない上に、日本語の説明が見つかりませんでした。

ってことで、私が試行錯誤した結果を書いてみます。誰得ですが…。

# その前に…
* Visual Studio SDKを予めインストールしておいて下さい。（[2010](http://www.microsoft.com/en-us/download/details.aspx?id=2680)、[2010 SP1](http://www.microsoft.com/en-us/download/details.aspx?id=21835)、[2012](https://visualstudiogallery.msdn.microsoft.com/b2fa5b3b-25eb-4a2f-80fd-59224778ea98)、[2013](https://visualstudiogallery.msdn.microsoft.com/842766ba-1f32-40cf-8617-39365ebfc134)）
* この記事では、拡張機能のタイトル、説明、ライセンスの多言語化のみ説明します。拡張機能自体の作り方や、メニューやユーザーインターフェイスの多言語化については説明しませんのでご了承下さい。といっても拡張機能自体のの日本語の説明がないのが現実ですが…。

# VSIXLangPackの作成方法
.vsixmanifest ファイル（Visual Studio SDKのテンプレートでプロジェクトを作成した場合はsource.extension.vsixmanifest）のあるフォルダー内に新しいフォルダーを作成します。フォルダー名は対応する言語名（例：日本語の場合はja-JP）とします。

![ja-JPフォルダーを作成](https://qiita-image-store.s3.amazonaws.com/0/60400/e6270e95-369b-4fab-a1b5-2f8292a2a7c4.png)

作成したフォルダー内に **extension.vsixlangpack** というファイルを作成します。「新しい項目の追加」で作成する場合、これを書いている時点で残念ながらVSIX Language Pack用のテンプレートがないので、代わりにテンプレートはXMLファイルを推奨します。

![新しい項目の追加](https://qiita-image-store.s3.amazonaws.com/0/60400/74f0b390-a96c-699c-4f04-3327e5bcd756.png)

![extension.vsixlangpackの位置](https://qiita-image-store.s3.amazonaws.com/0/60400/6ed2d82d-ace8-f122-8a1b-f2eed8d82349.png)

**extension.vsixlangpack** の内容は以下のとおりです。


```xml:extension.vsixlangpack
<?xml version="1.0" encoding="utf-8"?>
<VsixLanguagePack Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema-lp/2010">
  <LocalizedName>拡張機能の名前</LocalizedName>
  <LocalizedDescription>拡張機能の説明</LocalizedDescription>
  <License>ライセンス（テキストファイルを指定）</License>
  <MoreInfoUrl>外部リンク (URL)</MoreInfoUrl>
</VsixLanguagePack>
```
LocalizedNameとLocalizedDescriptionは必須で、LicenseとMoreInfoUrlは無くてもかまいません。

## 注意事項

**extension.vsixlangpack**（ライセンスファイルを指定している場合はそのファイルも）のプロパティで以下のように設定しないとビルド時にVSIXファイルに含まれません。これが原因で、私もうまくいかなかったことがあります。

* Include in VSIX - **True**
* ビルド アクション - **コンテンツ**
* 出力ディレクトリにコピー - **常にコピーする** または **新しい場合はコピーする**

![extension.vsixlangpack のプロパティ](https://qiita-image-store.s3.amazonaws.com/0/60400/d6fcbc84-048b-6e91-bedb-4b0d64e7e764.png)

# 結果

拡張機能本体の言語を英語（米国）に指定して、日本語の言語パックを作成した場合

![日本語版Windows 7での表示](https://qiita-image-store.s3.amazonaws.com/0/60400/f5d0c064-061d-31c4-33e2-72c35da7ff6d.png)

日本語版Windows 7

![英語版Windows 10 TPでの表示](https://qiita-image-store.s3.amazonaws.com/0/60400/752d2cf7-ce06-ecb9-cc79-3c151eab024d.png)

英語版Windows 10 TP

# 参考ページ
以下のページを参考させていただきました。

* [Localizing VSIX Packages](http://msdn.microsoft.com/ja-jp/library/dd997147.aspx)
* [VSIXLanguagePack Element \(VSIX Language Pack Schema\)](http://msdn.microsoft.com/ja-jp/library/dd393699.aspx)

# 宣伝（ステルさない「マ」）
Visual Studio Gallaryで自作の拡張機能を公開しています。

[Visual Studio ギャラリー](https://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=User&f%5B0%5D.Value=%E3%81%82%E3%82%8A%E3%81%AB%E3%82%83%E3%82%93)

まだまだ未熟ですが、今後も拡張機能（主に痛IDE系…ｗ）を公開していく予定です。