Quick fix for i18n

Just use the english locale for now. Load locale data from the
filesystem in the main process and pass it to the renderer preload
script via ipc. Note that we need the locale data to be available by the
time view scripts are loaded.

// FREEBIE
This commit is contained in:
lilia 2017-04-03 23:32:46 -07:00 committed by Scott Nonnenberg
parent 88893079d2
commit 63657db3be
No known key found for this signature in database
GPG Key ID: A4931C09644C654B
5 changed files with 51 additions and 12 deletions

View File

@ -731,6 +731,7 @@
<script type='text/javascript' src='js/conversation_controller.js'></script>
<script type='text/javascript' src='js/panel_controller.js'></script>
<script type='text/javascript' src='js/emoji_util.js'></script>
<script type='text/javascript' src='js/i18n.js'></script>
<script type='text/javascript' src='js/views/whisper_view.js'></script>
<script type='text/javascript' src='js/views/last_seen_indicator_view.js'></script>

View File

@ -153,17 +153,19 @@
};
// Translate
window.i18n = function(message, substitutions) {
if (window.chrome && chrome.i18n) {
return chrome.i18n.getMessage(message, substitutions);
}
};
i18n.getLocale = function() {
if (window.chrome && chrome.i18n) {
return chrome.i18n.getUILanguage();
}
return 'en';
};
if (window.chrome && window.chrome.i18n) {
window.i18n = function(message, substitutions) {
return chrome.i18n.getMessage(message, substitutions);
};
i18n.getLocale = function() {
if (window.chrome && chrome.i18n) {
return chrome.i18n.getUILanguage();
}
return 'en';
};
}
extension.install = function(mode) {
if (mode === 'standalone') {

22
js/i18n.js Normal file
View File

@ -0,0 +1,22 @@
/*
* vim: ts=4:sw=4:expandtab
*/
;(function() {
'use strict';
var json = window.env.locale_json;
window.i18n = function (message, substitutions) {
var s = json[message] ? json[message].message : message;
if (substitutions instanceof Array) {
substitutions.forEach(function(sub) {
s = s.replace(/\$.+?\$/, sub);
});
} else if (substitutions) {
s = s.replace(/\$.+?\$/, substitutions);
}
return s;
};
i18n.getLocale = function() {
return window.env.locale;
};
})();

13
main.js
View File

@ -6,6 +6,7 @@ const url = require('url')
const fs = require('fs')
const autoUpdater = require('electron-updater').autoUpdater
const autoUpdaterInterval = 60 * 60 * 1000;
const ipc = electron.ipcMain;
app.setAppUserModelId('org.whispersystems.signal-desktop')
@ -47,12 +48,22 @@ function createWindow () {
}
})
// Load locale
const locale = 'en'; // FIXME
const localeData = JSON.parse(fs.readFileSync(path.join(__dirname, '_locales', locale, 'messages.json'), 'utf-8'))
ipc.on('locale-data', function(event, arg) {
event.returnValue = localeData;
});
// and load the index.html of the app.
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, 'background.html'),
protocol: 'file:',
slashes: true,
query: { node_env: NODE_ENV }
query: {
node_env: NODE_ENV,
locale: locale
}
}))
// Open the DevTools.

View File

@ -8,3 +8,6 @@ window.location.search.substring(1).split('&').forEach(function(variable) {
var pair = variable.split('=');
env[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
});
const ipc = require('electron').ipcRenderer
window.env.locale_json = ipc.sendSync('locale-data');