Skip to content

Commit

Permalink
fix #160 support multi language(en, cn for now) (#224)
Browse files Browse the repository at this point in the history
  • Loading branch information
zxdong262 committed Jan 11, 2018
1 parent e9fc577 commit 02f2f42
Show file tree
Hide file tree
Showing 28 changed files with 383 additions and 181 deletions.
17 changes: 15 additions & 2 deletions app/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const {runServer, quitServer} = require('./lib/server')
const os = require('os')
const {resolve} = require('path')
const Ftp = require('./lib/sftp')
const {saveUserConfig} = require('./lib/user-config-controller')
const {saveUserConfig, userConfig} = require('./lib/user-config-controller')
const {init, changeHotkeyReg} = require('./lib/shortcut')
const fsExport = require('./lib/fs')
const ls = require('./lib/ls')
Expand All @@ -20,10 +20,12 @@ const menu = require('./lib/menu')
const {setWin} = require('./lib/win')
const log = require('electron-log')
const {testConnection} = require('./lib/terminal')
const {saveLangConfig, lang, langs} = require('./lib/locales')

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win
let timer
let {NODE_ENV} = process.env
const isDev = NODE_ENV === 'development'
const packInfo = require(isDev ? '../package.json' : './package.json')
Expand All @@ -34,6 +36,7 @@ const iconPath = resolve(
)

function onClose() {
clearTimeout(timer)
win = null
setWin(win)
quitServer()
Expand Down Expand Up @@ -74,7 +77,8 @@ async function createWindow () {
//shouldShowMenu: (event, params) => !params.isEditable
})

Object.assign(global, {
global.et = {}
Object.assign(global.et, {
autoVisitTime: config.timer,
_config: config,
Ftp,
Expand All @@ -89,12 +93,21 @@ async function createWindow () {
closeApp: () => {
win.close()
},
restart: () => {
win.close()
app.relaunch()
},
lang,
langs,
packInfo,
os,
saveUserConfig,
changeHotkey: changeHotkeyReg(globalShortcut, win)
})

timer = setTimeout(() => {
saveLangConfig(saveUserConfig, userConfig)
}, 100)

let opts = `http://localhost:${config.port}/index.html`
if (isDev) {
Expand Down
11 changes: 11 additions & 0 deletions app/lib/constants.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* constants
*/

let {NODE_ENV} = process.env

module.exports = {
isDev: NODE_ENV === 'development',
defaultLang: 'zh_cn'
}

73 changes: 73 additions & 0 deletions app/lib/locales.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* multi language support
*/

const {isDev, defaultLang} = require('./constants')
const fs = require('fs')
const _ = require('lodash')
const {resolve} = require('path')
const {userConfig} = require('./user-config-controller')

let path = (isDev
? '../'
: '') +
'../node_modules/electerm-locales/locales'
let localeFolder = resolve(__dirname, path)

//languages array
const langs = fs.readdirSync(localeFolder)
.map(fileName => {
let filePath = resolve(localeFolder, fileName)
let lang = require(filePath)
return {
path: filePath,
id: fileName.replace('.js', ''),
name: lang.name
}
})
const langMap = langs.reduce((prev, l) => {
prev[l.id] = l
return prev
}, {})

const getLang = () => {
if (userConfig.language) {
return userConfig.language
}
let languageEnv = process.env.LANGUAGE.toLowerCase()
if (langMap[languageEnv]) {
return languageEnv
}
return defaultLang
}

let language = getLang()

exports.lang = require(langMap[language].path).lang

/**
* string translate
* @param {string} id eg: 'menu.cut'
*/
exports.e = id => {
return _.get(exports.lang, id) || id
}

exports.prefix = prefix => {
return (id) => {
return _.get(exports.lang, `${prefix}.${id}`) || id
}
}

exports.langs = langs

exports.saveLangConfig = (saveUserConfig, userConfig) => {
if (!userConfig.language) {
saveUserConfig({
language: defaultLang
})
language = defaultLang
}
}


74 changes: 37 additions & 37 deletions app/lib/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,63 @@ const {app, Menu, shell} = require('electron')
let {NODE_ENV} = process.env
const isDev = NODE_ENV === 'development'
const packInfo = require(isDev ? '../../package.json' : '../package.json')
const {prefix} = require('./locales')
const e = prefix('menu')

const template = [
{
label: 'Edit',
label: e('edit'),
submenu: [
{role: 'undo'},
{role: 'redo'},
{role: 'undo', label: e('undo')},
{role: 'redo', label: e('redo')},
{type: 'separator'},
{role: 'cut'},
{role: 'copy'},
{role: 'paste'},
{role: 'pasteandmatchstyle'},
{role: 'delete'},
{role: 'selectall'}
{role: 'cut', label: e('cut')},
{role: 'copy', label: e('copy')},
{role: 'paste', label: e('paste')},
{role: 'pasteandmatchstyle', label: e('pasteandmatchstyle')},
{role: 'delete', label: e('del')},
{role: 'selectall', label: e('selectall')}
]
},
{
label: 'View',
label: e('view'),
submenu: [
{role: 'reload'},
{role: 'forcereload'},
{role: 'toggledevtools'},
{role: 'reload', label: e('reload')},
{role: 'forcereload', label: e('forcereload')},
{role: 'toggledevtools', label: e('toggledevtools')},
{type: 'separator'},
{role: 'resetzoom'},
{role: 'zoomin'},
{role: 'zoomout'},
{role: 'resetzoom', label: e('resetzoom')},
{role: 'zoomin', label: e('zoomin')},
{role: 'zoomout', label: e('zoomout')},
{type: 'separator'},
{role: 'togglefullscreen'}
{role: 'togglefullscreen', label: e('togglefullscreen')}
]
},
{
role: 'window',
role: e('window'),
submenu: [
{role: 'minimize'},
{role: 'close'}
{role: 'minimize', label: e('minimize')},
{role: 'close', label: e('close')}
]
},
{
role: 'help',
label: 'help',
label: e('help'),
submenu: [
{
label: 'about',
label: e('about'),
click () {
require('./win').win.webContents.send('open-about', null)
}
},
{
label: 'check update',
label: e('checkUpdate'),
click() {
require('./win').win.webContents.send('checkupdate', null)
}
},
{
label: 'report issue',
label: e('reportIssue'),
click () {
shell
.openExternal('https://github.com/electerm/electerm/issues/new')
Expand All @@ -73,7 +75,7 @@ const template = [
}
},
{
label: 'homepage',
label: e('homepage'),
click () {
shell
.openExternal(packInfo.homepage)
Expand All @@ -87,15 +89,13 @@ if (process.platform === 'darwin') {
template.unshift({
label: app.getName(),
submenu: [
{role: 'about'},
{type: 'separator'},
{role: 'services', submenu: []},
{type: 'separator'},
{role: 'hide'},
{role: 'hideothers'},
{role: 'unhide'},
{role: 'hide', label: e('hide')},
{role: 'hideothers', label: e('hideothers')},
{role: 'unhide', label: e('unhide')},
{type: 'separator'},
{role: 'quit'}
{role: 'quit', label: e('quit')}
]
})

Expand All @@ -105,19 +105,19 @@ if (process.platform === 'darwin') {
{
label: 'Speech',
submenu: [
{role: 'startspeaking'},
{role: 'stopspeaking'}
{role: 'startspeaking', label: e('startspeaking')},
{role: 'stopspeaking', label: e('stopspeaking')}
]
}
)

// Window menu
template[3].submenu = [
{role: 'close'},
{role: 'minimize'},
{role: 'zoom'},
{role: 'close', label: e('close')},
{role: 'minimize', label: e('minimize')},
{role: 'zoom', label: e('zoom')},
{type: 'separator'},
{role: 'front'}
{role: 'front', label: e('front')}
]
}

Expand Down
2 changes: 1 addition & 1 deletion app/lib/terminal.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class Terminal {
let opts = Object.assign(
{},
{
readyTimeout: _.get(global, '_config.sshReadyTimeout')
readyTimeout: _.get(global, 'et._config.sshReadyTimeout')
},
_.pick(initOptions, [
'host',
Expand Down
10 changes: 5 additions & 5 deletions app/lib/user-config-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
const fs = require('fs')
const {resolve} = require('path')
const appPath = require('./app-path')
let userConfig = {}
exports.userConfig = {}
const userConfigPath = resolve(appPath, 'electerm-user-config.json')

try {
userConfig = require(userConfigPath)
exports.userConfig = require(userConfigPath)
} catch (e) {
console.log('no user config, but it is ok')
}

exports.saveUserConfig = (conf) => {
Object.assign(global._config, conf)
Object.assign(userConfig, conf)
Object.assign(global.et._config, conf)
Object.assign(exports.userConfig, conf)
fs.writeFileSync(
userConfigPath,
JSON.stringify(userConfig)
JSON.stringify(exports.userConfig)
)
}

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "electerm",
"version": "0.13.3",
"version": "0.14.0",
"description": "terminal/ssh/sftp client(mac, win, linux) based on electron/node-pty/xterm and more",
"main": "app.js",
"scripts": {
Expand Down Expand Up @@ -114,6 +114,7 @@
"body-parser": "1.18.2",
"cors": "2.8.4",
"electerm-resource": "1.1.2",
"electerm-locales": "0.0.1",
"electron-context-menu": "0.9.1",
"electron-log": "2.2.13",
"express": "4.16.2",
Expand Down
Loading

0 comments on commit 02f2f42

Please sign in to comment.