@crowdin/crowdin-apps-functions
Version:
Utility library to easily and quickly develop Crowdin App
46 lines (45 loc) • 1.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertString = void 0;
/**
* Function to convert source or translation according to specified config
*
* @param config conversion settings
* @param string string
* @param languageId language id
* @returns converted string
*/
function convertString(config, string, languageId) {
const text = !!languageId ? (string.translations || {})[languageId].text : string.text;
if (string.hasPlurals && string.identifier && text) {
return serializeICU(config, string.identifier, text);
}
if (typeof text === 'string') {
return convertPlaceholders(config, text);
}
}
exports.convertString = convertString;
function serializeICU(config, identifier, string) {
if (config.plurals === 'icu') {
const pluralFormsTranslations = Object.entries(string)
.map(([key, value]) => `${key} {${convertPlaceholders(config, value)}}`)
.join(' ');
return `{${identifier}, plural, ${pluralFormsTranslations}}`;
}
if (config.plurals === 'concat') {
return Object.entries(string)
.map(([, value]) => `${convertPlaceholders(config, value)}`)
.join('|');
}
return JSON.stringify(Object.entries(string).map(([, value]) => convertPlaceholders(config, value)));
}
function convertPlaceholders(config, string) {
const regex = /\[%([^\]]+)]/gm;
if (config.placeholders === 'mustache') {
return string.replace(regex, '{$1}');
}
if (config.placeholders === 'xlf') {
return string.replace(regex, '<x>$1</x>');
}
return string;
}