Add initial support for placeholders and substitutions
This commit is contained in:
parent
d54de73e03
commit
d4925e6226
1 changed files with 34 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
// Implementation of chrome.i18n.getMessage
|
||||||
|
// https://developer.chrome.com/extensions/i18n#method-getMessage
|
||||||
|
//
|
||||||
|
// Does not implement predefined messages:
|
||||||
|
// https://developer.chrome.com/extensions/i18n#overview-predefined
|
||||||
|
|
||||||
const {ipcRenderer} = require('electron')
|
const {ipcRenderer} = require('electron')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
@ -28,12 +34,39 @@ const getLanguage = () => {
|
||||||
return navigator.language.replace(/-.*$/, '').toLowerCase()
|
return navigator.language.replace(/-.*$/, '').toLowerCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const replaceNumberedSubstitutions = (message, substitutions) => {
|
||||||
|
return message.replace(/\$(\d+)/, (_, number) => {
|
||||||
|
const index = parseInt(number, 10) - 1
|
||||||
|
return substitutions[index] || ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const replacePlaceholders = (message, placeholders, substitutions) => {
|
||||||
|
if (typeof substitutions === 'string') {
|
||||||
|
substitutions = [substitutions]
|
||||||
|
}
|
||||||
|
if (!Array.isArray(substitutions)) {
|
||||||
|
substitutions = []
|
||||||
|
}
|
||||||
|
|
||||||
|
if (placeholders) {
|
||||||
|
Object.keys(placeholders).forEach((name) => {
|
||||||
|
let {content} = placeholders[name]
|
||||||
|
content = replaceNumberedSubstitutions(content, substitutions)
|
||||||
|
message = message.replace(new RegExp(`\\$${name}\\$`, 'gi'), content)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return replaceNumberedSubstitutions(message, substitutions)
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getMessage (messageName, substitutions) {
|
getMessage (messageName, substitutions) {
|
||||||
const language = getLanguage()
|
const language = getLanguage()
|
||||||
const messages = getMessages(language)
|
const messages = getMessages(language)
|
||||||
if (messages.hasOwnProperty(messageName)) {
|
if (messages.hasOwnProperty(messageName)) {
|
||||||
return messages[messageName].message
|
const {message, placeholders} = messages[messageName]
|
||||||
|
return replacePlaceholders(message, placeholders, substitutions)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue