substance
Version:
Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing system. It is developed to power our online editing platform [Substance](http://substance.io).
46 lines (41 loc) • 1.07 kB
JavaScript
/*
Default label provider implementation
*/
export default class DefaultLabelProvider {
constructor (labels, lang) {
this.lang = lang || 'en'
this.labels = labels
}
getLabel (name, params) {
const labels = this.labels[this.lang]
if (!labels) return name
const rawLabel = labels[name] || name
// If context is provided, resolve templates
if (params) {
return this._evalTemplate(rawLabel, params)
} else {
return rawLabel
}
}
setLanguage (lang) {
this.lang = lang || 'en'
}
_evalTemplate (label, params) {
const vars = this._extractVariables(label)
vars.forEach((varName) => {
const searchExp = new RegExp(`\\\${${varName}}`, 'g')
const replaceStr = params[varName]
label = label.replace(searchExp, replaceStr)
})
return label
}
_extractVariables (rawLabel) {
const qualityRegex = /\${(\w+)}/g
let matches
const vars = []
while (matches = qualityRegex.exec(rawLabel)) { // eslint-disable-line
vars.push(matches[1])
}
return vars
}
}