+// 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 fs = require('fs')
const path = require('path')
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 = {
getMessage (messageName, substitutions) {
const language = getLanguage()
const messages = getMessages(language)
if (messages.hasOwnProperty(messageName)) {
- return messages[messageName].message
+ const {message, placeholders} = messages[messageName]
+ return replacePlaceholders(message, placeholders, substitutions)
}
}
}