Skip to content

Localization

Jimmy Lewis edited this page Dec 18, 2021 · 10 revisions

Library Manager Localization

Library manager localization is using industry standard XLIFF file format for localization. The supported language set is the same as for Visual Studio (cs, de, en, es, fr, it, ja, ko, pl, pt-BR, ru, tr, zh-Hans, zh-Hant). The localization is currently done by the Microsoft vendor team. The point of contact are Jimmy Lewis on the Web Tools team, and Cristiano Suzuki on the loc team.

Localization Process

We have a set of LCL files checked in into LibMan repo. Loc team will pick up LCL files automatically from via a build artifact, and will automatically generate a PR with the new localized terms. Then the LCL changes need to be applied back to the .resx files manually; steps for doing this are documented here.

VSCT localization

The tooling for handling LCL files does not work for VSCT conversions, so we will use XLIFF files as the intermediary format, and then use the translated XLIFF files to generate localized VSCT files.

VSCT file localization using VsctToXliff tool

Unfortunately VSCT file format is not support by the MAT 4.0 tool (or any other publicly available tool for that matter). So we chose to utilize VsctToXliff tool written by NodeJS Tooling team. See https://github.com/Microsoft/nodejstools/tree/v1.3.x/Common/Tools/VsctToXliff for the original sources. I (alexgav) made slight changes to the tool to make generated xlf machine-translatable and editable with MAT Editor. The location of the modified sources is common\tools\VsctToXliff. See

Using Using-VsctToXliff tool to convert between VSCT and XLF

Building the localized VSIX

Building the localized VSIX is unfortunately a bit complicated since LibMan projects use the new csproj file format, which doesn't include many of the standard C# targets that VSIX build tasks expect to exist. For example, SatelliteDllsProjectOutputGroup target doesn't exist in the new project system. So we will have to do some manual customization of our VSIX csproj to allow inclusion and deployment of the satellite DLLs. I ended up using

<VSIXSourceItem ... />

to include satellite assemblies per advice from Jacques.