27 lines
1 KiB
JavaScript
27 lines
1 KiB
JavaScript
|
import _ from 'underscore';
|
||
|
|
||
|
/**
|
||
|
Very limited implementation of sprintf supporting only named parameters.
|
||
|
|
||
|
@param input (translated) text with parameters (e.g. '%{num_users} users use us')
|
||
|
@param parameters object mapping parameter names to values (e.g. { num_users: 5 })
|
||
|
@param escapeParameters whether parameter values should be escaped (see http://underscorejs.org/#escape)
|
||
|
@returns {String} the text with parameters replaces (e.g. '5 users use us')
|
||
|
|
||
|
@see https://ruby-doc.org/core-2.3.3/Kernel.html#method-i-sprintf
|
||
|
@see https://gitlab.com/gitlab-org/gitlab-ce/issues/37992
|
||
|
**/
|
||
|
export default (input, parameters, escapeParameters = true) => {
|
||
|
let output = input;
|
||
|
|
||
|
if (parameters) {
|
||
|
Object.keys(parameters).forEach((parameterName) => {
|
||
|
const parameterValue = parameters[parameterName];
|
||
|
const escapedParameterValue = escapeParameters ? _.escape(parameterValue) : parameterValue;
|
||
|
output = output.replace(new RegExp(`%{${parameterName}}`, 'g'), escapedParameterValue);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return output;
|
||
|
};
|