UNPKG

@crowdin/crowdin-apps-functions

Version:

Utility library to easily and quickly develop Crowdin App

46 lines (45 loc) 1.65 kB
"use strict"; 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; }