183 lines
8.7 KiB
JavaScript
183 lines
8.7 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
/*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
* Please make sure to make edits in the .ts file at https://github.com/microsoft/vscode-loader/
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*---------------------------------------------------------------------------------------------
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
var _nlsPluginGlobal = this;
|
|
var NLSBuildLoaderPlugin;
|
|
(function (NLSBuildLoaderPlugin) {
|
|
var global = (_nlsPluginGlobal || {});
|
|
var Resources = global.Plugin && global.Plugin.Resources ? global.Plugin.Resources : undefined;
|
|
var IS_PSEUDO = (global && global.document && global.document.location && global.document.location.hash.indexOf('pseudo=true') >= 0);
|
|
function _format(message, args) {
|
|
var result;
|
|
if (args.length === 0) {
|
|
result = message;
|
|
}
|
|
else {
|
|
result = message.replace(/\{(\d+)\}/g, function (match, rest) {
|
|
var index = rest[0];
|
|
return typeof args[index] !== 'undefined' ? args[index] : match;
|
|
});
|
|
}
|
|
if (IS_PSEUDO) {
|
|
// FF3B and FF3D is the Unicode zenkaku representation for [ and ]
|
|
result = '\uFF3B' + result.replace(/[aouei]/g, '$&$&') + '\uFF3D';
|
|
}
|
|
return result;
|
|
}
|
|
function findLanguageForModule(config, name) {
|
|
var result = config[name];
|
|
if (result)
|
|
return result;
|
|
result = config['*'];
|
|
if (result)
|
|
return result;
|
|
return null;
|
|
}
|
|
function localize(data, message) {
|
|
var args = [];
|
|
for (var _i = 0; _i < (arguments.length - 2); _i++) {
|
|
args[_i] = arguments[_i + 2];
|
|
}
|
|
return _format(message, args);
|
|
}
|
|
function createScopedLocalize(scope) {
|
|
return function (idx, defaultValue) {
|
|
var restArgs = Array.prototype.slice.call(arguments, 2);
|
|
return _format(scope[idx], restArgs);
|
|
};
|
|
}
|
|
var NLSPlugin = /** @class */ (function () {
|
|
function NLSPlugin() {
|
|
this.localize = localize;
|
|
}
|
|
NLSPlugin.prototype.setPseudoTranslation = function (value) {
|
|
IS_PSEUDO = value;
|
|
};
|
|
NLSPlugin.prototype.create = function (key, data) {
|
|
return {
|
|
localize: createScopedLocalize(data[key])
|
|
};
|
|
};
|
|
NLSPlugin.prototype.load = function (name, req, load, config) {
|
|
config = config || {};
|
|
if (!name || name.length === 0) {
|
|
load({
|
|
localize: localize
|
|
});
|
|
}
|
|
else {
|
|
var suffix = void 0;
|
|
if (Resources && Resources.getString) {
|
|
suffix = '.nls.keys';
|
|
req([name + suffix], function (keyMap) {
|
|
load({
|
|
localize: function (moduleKey, index) {
|
|
if (!keyMap[moduleKey])
|
|
return 'NLS error: unknown key ' + moduleKey;
|
|
var mk = keyMap[moduleKey].keys;
|
|
if (index >= mk.length)
|
|
return 'NLS error unknow index ' + index;
|
|
var subKey = mk[index];
|
|
var args = [];
|
|
args[0] = moduleKey + '_' + subKey;
|
|
for (var _i = 0; _i < (arguments.length - 2); _i++) {
|
|
args[_i + 1] = arguments[_i + 2];
|
|
}
|
|
return Resources.getString.apply(Resources, args);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
if (config.isBuild) {
|
|
req([name + '.nls', name + '.nls.keys'], function (messages, keys) {
|
|
NLSPlugin.BUILD_MAP[name] = messages;
|
|
NLSPlugin.BUILD_MAP_KEYS[name] = keys;
|
|
load(messages);
|
|
});
|
|
}
|
|
else {
|
|
var pluginConfig = config['vs/nls'] || {};
|
|
var language = pluginConfig.availableLanguages ? findLanguageForModule(pluginConfig.availableLanguages, name) : null;
|
|
suffix = '.nls';
|
|
if (language !== null && language !== NLSPlugin.DEFAULT_TAG) {
|
|
suffix = suffix + '.' + language;
|
|
}
|
|
req([name + suffix], function (messages) {
|
|
if (Array.isArray(messages)) {
|
|
messages.localize = createScopedLocalize(messages);
|
|
}
|
|
else {
|
|
messages.localize = createScopedLocalize(messages[name]);
|
|
}
|
|
load(messages);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
NLSPlugin.prototype._getEntryPointsMap = function () {
|
|
global.nlsPluginEntryPoints = global.nlsPluginEntryPoints || {};
|
|
return global.nlsPluginEntryPoints;
|
|
};
|
|
NLSPlugin.prototype.write = function (pluginName, moduleName, write) {
|
|
// getEntryPoint is a Monaco extension to r.js
|
|
var entryPoint = write.getEntryPoint();
|
|
// r.js destroys the context of this plugin between calling 'write' and 'writeFile'
|
|
// so the only option at this point is to leak the data to a global
|
|
var entryPointsMap = this._getEntryPointsMap();
|
|
entryPointsMap[entryPoint] = entryPointsMap[entryPoint] || [];
|
|
entryPointsMap[entryPoint].push(moduleName);
|
|
if (moduleName !== entryPoint) {
|
|
write.asModule(pluginName + '!' + moduleName, 'define([\'vs/nls\', \'vs/nls!' + entryPoint + '\'], function(nls, data) { return nls.create("' + moduleName + '", data); });');
|
|
}
|
|
};
|
|
NLSPlugin.prototype.writeFile = function (pluginName, moduleName, req, write, config) {
|
|
var entryPointsMap = this._getEntryPointsMap();
|
|
if (entryPointsMap.hasOwnProperty(moduleName)) {
|
|
var fileName = req.toUrl(moduleName + '.nls.js');
|
|
var contents = [
|
|
'/*---------------------------------------------------------',
|
|
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
|
' *--------------------------------------------------------*/'
|
|
], entries = entryPointsMap[moduleName];
|
|
var data = {};
|
|
for (var i = 0; i < entries.length; i++) {
|
|
data[entries[i]] = NLSPlugin.BUILD_MAP[entries[i]];
|
|
}
|
|
contents.push('define("' + moduleName + '.nls", ' + JSON.stringify(data, null, '\t') + ');');
|
|
write(fileName, contents.join('\r\n'));
|
|
}
|
|
};
|
|
NLSPlugin.prototype.finishBuild = function (write) {
|
|
write('nls.metadata.json', JSON.stringify({
|
|
keys: NLSPlugin.BUILD_MAP_KEYS,
|
|
messages: NLSPlugin.BUILD_MAP,
|
|
bundles: this._getEntryPointsMap()
|
|
}, null, '\t'));
|
|
};
|
|
;
|
|
NLSPlugin.DEFAULT_TAG = 'i-default';
|
|
NLSPlugin.BUILD_MAP = {};
|
|
NLSPlugin.BUILD_MAP_KEYS = {};
|
|
return NLSPlugin;
|
|
}());
|
|
NLSBuildLoaderPlugin.NLSPlugin = NLSPlugin;
|
|
(function () {
|
|
define('vs/nls', new NLSPlugin());
|
|
})();
|
|
})(NLSBuildLoaderPlugin || (NLSBuildLoaderPlugin = {}));
|