refactor: implement chrome.i18n.getMessage() without the remote module (#16739)

* refactor: implement chrome.i18n.getMessage() without the remote module

* replace navigator.language with app.getLocale()
This commit is contained in:
Milan Burda 2019-02-08 21:07:09 +01:00 committed by Shelley Vohr
parent b97f6bd7d4
commit 1632c4b837
2 changed files with 34 additions and 38 deletions

View file

@ -6,46 +6,17 @@
// Does not implement predefined messages:
// https://developer.chrome.com/extensions/i18n#overview-predefined
const { potentiallyRemoteRequire } = require('@electron/internal/renderer/remote')
const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
const fs = potentiallyRemoteRequire('fs')
const path = potentiallyRemoteRequire('path')
const ipcRendererUtils = require('@electron/internal/renderer/ipc-renderer-internal-utils')
let metadata
const getExtensionMetadata = (extensionId) => {
if (!metadata) {
metadata = ipcRenderer.sendSync('CHROME_I18N_MANIFEST', extensionId)
}
return metadata
}
const getMessagesPath = (extensionId, language) => {
const metadata = getExtensionMetadata(extensionId)
const localesDirectory = path.join(metadata.srcDirectory, '_locales')
const getMessages = (extensionId) => {
try {
const filename = path.join(localesDirectory, language, 'messages.json')
fs.accessSync(filename, fs.constants.R_OK)
return filename
} catch (err) {
const defaultLocale = metadata.default_locale || 'en'
return path.join(localesDirectory, defaultLocale, 'messages.json')
}
}
const getMessages = (extensionId, language) => {
try {
const messagesPath = getMessagesPath(extensionId, language)
return JSON.parse(fs.readFileSync(messagesPath)) || {}
const data = ipcRendererUtils.invokeSync('CHROME_GET_MESSAGES', extensionId)
return JSON.parse(data) || {}
} catch (error) {
return {}
}
}
const getLanguage = () => {
return navigator.language.replace(/-.*$/, '').toLowerCase()
}
const replaceNumberedSubstitutions = (message, substitutions) => {
return message.replace(/\$(\d+)/, (_, number) => {
const index = parseInt(number, 10) - 1
@ -73,7 +44,7 @@ const replacePlaceholders = (message, placeholders, substitutions) => {
}
const getMessage = (extensionId, messageName, substitutions) => {
const messages = getMessages(extensionId, getLanguage())
const messages = getMessages(extensionId)
if (messages.hasOwnProperty(messageName)) {
const { message, placeholders } = messages[messageName]
return replacePlaceholders(message, placeholders, substitutions)