mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-03-26 07:44:10 +08:00
auto calc locale version
This commit is contained in:
@@ -57,7 +57,7 @@ exports.run = ->
|
||||
ticket_create_email: fs.readFileSync('./core/template/ticket_create_email.html').toString()
|
||||
ticket_reply_email: fs.readFileSync('./core/template/ticket_reply_email.html').toString()
|
||||
|
||||
app.localeVersion = config.i18n.version
|
||||
|
||||
app.use connect.json()
|
||||
app.use connect.urlencoded()
|
||||
app.use connect.cookieParser()
|
||||
@@ -68,14 +68,15 @@ exports.run = ->
|
||||
|
||||
app.use (req, res, next) ->
|
||||
res.locals.app = app
|
||||
res.locals.res = res
|
||||
res.locals.config = app.config
|
||||
res.locals.t = res.t = app.i18n.getTranslator req.cookies.language
|
||||
|
||||
res.locals.selectHook = (name) ->
|
||||
return app.pluggable.selectHook req.account, name
|
||||
|
||||
language = req.cookies.language ? config.i18n.default_language
|
||||
timezone = req.cookies.timezone ? config.i18n.default_timezone
|
||||
res.language = req.cookies.language ? config.i18n.default_language
|
||||
res.timezone = req.cookies.timezone ? config.i18n.default_timezone
|
||||
|
||||
res.locals.moment = res.moment = ->
|
||||
return moment.apply(@, arguments).locale(language).tz(timezone)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
stringify = require 'json-stable-stringify'
|
||||
CounterCache = require('counter-cache')
|
||||
|
||||
config = require '../config'
|
||||
|
||||
{redis} = app
|
||||
|
||||
exports.counter = new CounterCache()
|
||||
|
||||
exports.hashKey = (key, param) ->
|
||||
return "#{config.redis.prefix}:#{key}" + stringify(param)
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
path = require 'path'
|
||||
fs = require 'fs'
|
||||
_ = require 'underscore'
|
||||
acceptLanguage = require 'accept-language'
|
||||
|
||||
acceptLanguage = require 'accept-language'
|
||||
stringify = require 'json-stable-stringify'
|
||||
|
||||
utils = require './utils'
|
||||
cache = require './cache'
|
||||
config = require '../config'
|
||||
|
||||
acceptLanguage.default config.i18n.default_language.replace('_', '-')
|
||||
@@ -71,12 +75,23 @@ exports.initI18nData = (req, res, next) ->
|
||||
|
||||
next()
|
||||
|
||||
exports.downloadLocales = (req, res) ->
|
||||
language = req.params.language
|
||||
exports.pickClientLocale = (language) ->
|
||||
cached_result = cache.counter.get "client.locale:#{language}"
|
||||
|
||||
if cached_result
|
||||
return cached_result
|
||||
|
||||
result = i18n_data[config.i18n.default_language]
|
||||
|
||||
if language in config.i18n.available_language and language != config.i18n.default_language
|
||||
result = _.extend result, i18n_data[language]
|
||||
|
||||
res.json result
|
||||
cache.counter.set "client.locale:#{language}", result, NaN
|
||||
|
||||
return result
|
||||
|
||||
exports.clientLocaleHash = (language) ->
|
||||
return utils.sha256 stringify exports.pickClientLocale language
|
||||
|
||||
exports.downloadLocales = (req, res) ->
|
||||
res.json exports.pickClientLocale req.params.language
|
||||
|
||||
@@ -15,7 +15,6 @@ exports.get '/pay', requireAuthenticate, renderAccount, (req, res) ->
|
||||
payment_methods: (callback) ->
|
||||
async.map pluggable.selectHook(req.account, 'billing.payment_methods'), (hook, callback) ->
|
||||
hook.widget_generator req.account, (html) ->
|
||||
console.log html
|
||||
callback null, html
|
||||
, callback
|
||||
|
||||
|
||||
@@ -49,12 +49,13 @@ $ ->
|
||||
return "error_code.#{name}"
|
||||
|
||||
client_version = localStorage.getItem 'locale_version'
|
||||
current_version = "#{($ 'body').data 'locale'}"
|
||||
latest_version = $('body').data 'locale-version'
|
||||
|
||||
if client_version == current_version
|
||||
window.i18n_data = JSON.parse localStorage.getItem 'locale_content'
|
||||
if client_version == latest_version
|
||||
window.i18n_data = JSON.parse localStorage.getItem 'locale_cache'
|
||||
else
|
||||
$.getJSON "/locale/#{$.cookie('language')}", (data) ->
|
||||
window.i18n_data = data
|
||||
localStorage.setItem 'locale_version', current_version
|
||||
|
||||
localStorage.setItem 'locale_version', latest_version
|
||||
localStorage.setItem 'locale_content', JSON.stringify data
|
||||
|
||||
@@ -81,3 +81,7 @@ body {
|
||||
.btn {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a {
|
||||
background-color: #463265 !important;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ html
|
||||
for hook in selectHook('view.layout.styles')
|
||||
link(rel='stylesheet', href=hook.path)
|
||||
|
||||
body(data-locale=app.localeVersion)
|
||||
body(data-locale-version=app.i18n.clientLocaleHash(res.language))
|
||||
header.navbar-fixed-top
|
||||
.container
|
||||
nav.navbar.navbar-default.navbar-inverse(role='navigation')
|
||||
@@ -44,6 +44,13 @@ html
|
||||
a(href='/account/register/')= t('account.register')
|
||||
li
|
||||
a(href='/account/login/')= t('account.login')
|
||||
li.dropdown
|
||||
a(href='#', data-toggle='dropdown').dropdown-toggle
|
||||
span.glyphicon.glyphicon-globe
|
||||
ul.dropdown-menu
|
||||
li
|
||||
a(href='#') 简体中文 (zh_CN)
|
||||
a(href='#') English (en)
|
||||
|
||||
block content
|
||||
#content.container
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
"request": "^2.40.0",
|
||||
"tmp": "^0.0.24",
|
||||
"underscore": "^1.6.0",
|
||||
"json-stable-stringify": "^1.0.0"
|
||||
"json-stable-stringify": "^1.0.0",
|
||||
"counter-cache": "^0.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@ module.exports =
|
||||
cookie_time: 30 * 24 * 3600 * 1000
|
||||
|
||||
i18n:
|
||||
version: '0.1'
|
||||
available_language: ['zh_CN']
|
||||
available_language: ['zh_CN', 'en']
|
||||
default_language: 'zh_CN'
|
||||
default_timezone: 'Asia/Shanghai'
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@ module.exports =
|
||||
cookie_time: 30 * 24 * 3600 * 1000
|
||||
|
||||
i18n:
|
||||
version: '0.1'
|
||||
available_language: ['zh_CN']
|
||||
available_language: ['zh_CN', 'en']
|
||||
default_language: 'zh_CN'
|
||||
default_timezone: 'Asia/Shanghai'
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ module.exports =
|
||||
|
||||
i18n:
|
||||
defaultLanguage: 'zh_CN'
|
||||
availableLanguage: ['zh_CN']
|
||||
availableLanguage: ['zh_CN', 'en']
|
||||
|
||||
plugin:
|
||||
available_extensions: ['rpvhost']
|
||||
|
||||
Reference in New Issue
Block a user