Browse Source

Add initial chrome.i18n.getMessage API

Kevin Sawicki 8 years ago
parent
commit
84960af793
4 changed files with 41 additions and 0 deletions
  1. 1 0
      filenames.gypi
  2. 4 0
      lib/browser/chrome-extension.js
  3. 2 0
      lib/renderer/chrome-api.js
  4. 34 0
      lib/renderer/extensions/i18n.js

+ 1 - 0
filenames.gypi

@@ -63,6 +63,7 @@
       'lib/renderer/api/remote.js',
       'lib/renderer/api/screen.js',
       'lib/renderer/api/web-frame.js',
+      'lib/renderer/extensions/i18n.js',
     ],
     'js2c_sources': [
       'lib/common/asar.js',

+ 4 - 0
lib/browser/chrome-extension.js

@@ -115,6 +115,10 @@ ipcMain.on('CHROME_RUNTIME_CONNECT', function (event, extensionId, connectInfo)
   page.webContents.sendToAll(`CHROME_RUNTIME_ONCONNECT_${extensionId}`, event.sender.id, portId, connectInfo)
 })
 
+ipcMain.on('CHROME_I18N_MANIFEST', function (event, extensionId) {
+  event.returnValue = manifestMap[extensionId]
+})
+
 ipcMain.on('CHROME_RUNTIME_SENDMESSAGE', function (event, extensionId, message) {
   const page = backgroundPages[extensionId]
   if (!page) {

+ 2 - 0
lib/renderer/chrome-api.js

@@ -199,4 +199,6 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
     setPopup () {},
     getPopup () {}
   }
+
+  chrome.i18n = require('./extensions/i18n.js')
 }

+ 34 - 0
lib/renderer/extensions/i18n.js

@@ -0,0 +1,34 @@
+const {ipcRenderer} = require('electron')
+const fs = require('fs')
+const path = require('path')
+
+const getMessagesPath = (language) => {
+  const manifest = ipcRenderer.sendSync('CHROME_I18N_MANIFEST', chrome.runtime.id)
+  let messagesPath = path.join(manifest.srcDirectory, '_locales', language, 'messages.json')
+  if (!fs.statSyncNoException(messagesPath)) {
+    messagesPath = path.join(manifest.srcDirectory, '_locales', manifest.default_locale, 'messages.json')
+  }
+  return messagesPath
+}
+
+const getMessages = (language) => {
+  try {
+    return JSON.parse(fs.readFileSync(getMessagesPath(language))) || {}
+  } catch (error) {
+    return {}
+  }
+}
+
+const getLanguage = () => {
+  return navigator.language.replace(/-.*$/, '').toLowerCase()
+}
+
+module.exports = {
+  getMessage (messageName, substitutions) {
+    const language = getLanguage()
+    const messages = getMessages(language)
+    if (messages.hasOwnProperty(messageName)) {
+      return messages[messageName].message
+    }
+  }
+}