auto calc locale version

This commit is contained in:
jysperm
2014-10-01 16:35:54 +08:00
parent 88877d1157
commit 7e2aa01956
12 changed files with 48 additions and 19 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -81,3 +81,7 @@ body {
.btn {
margin-right: 5px;
}
.navbar-inverse .navbar-nav > .open > a {
background-color: #463265 !important;
}

View File

@@ -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

View File

@@ -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"
}
}

View File

@@ -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'

View File

@@ -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'

View File

@@ -10,7 +10,7 @@ module.exports =
i18n:
defaultLanguage: 'zh_CN'
availableLanguage: ['zh_CN']
availableLanguage: ['zh_CN', 'en']
plugin:
available_extensions: ['rpvhost']