interpolate()

in components/localization/src/localization.js [33:65]


  interpolate(text, interpolationObject) {
    if (!interpolationObject || !Object.keys(interpolationObject).length) {
      return text;
    }
    const substringsForReplacing =
      getSubstringsForReplacing(text, interpolationObject);
    let resultText = text;
    Object.keys(substringsForReplacing).forEach(key => {
      if (substringsForReplacing[key] !== undefined) {
        resultText = resultText.replace(key, substringsForReplacing[key]);
      }
    });
    return resultText;

    function getSubstringsForReplacing(str, interpolationValues) {
      let currentInterpolatedFragmentStart = -1;
      const substringToValueMap = {};
      for (let i = 0; i < (str.length - 1); ++i) {
        if (str[i] === '{' && str[i + 1] === '{') {
          currentInterpolatedFragmentStart = i + 2;
          i = currentInterpolatedFragmentStart;
        } else if (str[i] === '}' && str[i + 1] === '}' &&
          currentInterpolatedFragmentStart > 0) {
          const variableName = str.substring(
            currentInterpolatedFragmentStart, i
          );
          substringToValueMap[`{{${variableName}}}`] =
            interpolationValues[variableName.trim()];
        }
      }
      return substringToValueMap;
    }
  }