i18n translator

This commit is contained in:
jysperm
2014-10-03 00:20:07 +08:00
parent 7e2aa01956
commit 25b701de17
4 changed files with 59 additions and 22 deletions

View File

@@ -2,15 +2,12 @@ path = require 'path'
fs = require 'fs'
_ = require 'underscore'
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('_', '-')
i18n_data = {}
for lang in config.i18n.available_language
@@ -23,29 +20,68 @@ exports.loadForPlugin = (plugin) ->
if fs.existsSync path
i18n_data[lang]['plugins'][plugin.name] = require lang
exports.translate = (name, lang) ->
unless lang
lang = config.i18n.default_language
exports.parseLanguageCode = parseLanguageCode = (language) ->
[lang, country] = language.replace('-', '_').split '_'
return {
language: language
lang: lang.toLowerCase()
country: country.toUpperCase()
}
exports.calcLanguagePriority = (req) ->
negotiator = new Negotiator req
language_info = parseLanguageCode req.cookies.language
result = _.filter config.i18n.available_language, (i) ->
return i.language == language_info.language
result = _.union result, _.filter config.i18n.available_language, (i) ->
return parseLanguageCode(i).lang == language_info.lang
result = _.union result, _.filter config.i18n.available_language, (i) ->
return parseLanguageCode(i).lang in negotiator.languages()
result.push config.i18n.default_language
result = _.union result, config.i18n.available_language
return result
exports.translateByLanguage = (name, language) ->
keys = name.split '.'
keys.unshift lang
keys.unshift language
result = i18n_data
for item in keys
unless result[item] == undefined
if result[item] == undefined
return undefined
else
result = result[item]
if result == undefined and lang != config.i18n.default_language
return exports.translate name, config.i18n.default_language
else if _.isObject result
return name
else
return result
return result
exports.getTranslator = (lang) ->
return (name) ->
return exports.translate name, lang
exports.translate = (name, req) ->
priority_order = exports.calcLanguagePriority req
for language in priority_order
result = exports.translateByLanguage name, language
if result != undefined
return result
return name
exports.getTranslator = (req) ->
return (name, payload) ->
result = exports.translate name, req
if _.isObject payload
for k, v of payload
result = result.replace new RegExp("__#{k}__", 'g'), v
return result
exports.initI18nData = (req, res, next) ->
timezone_mapping =

View File

@@ -1,5 +1,6 @@
$ ->
$('#service-switch button').click ->
# TODO: refactor
is_enable = if $(@).hasClass 'btn-success' then true else false
$.post "/plugin/#{$(@).data('name')}/switch/", JSON.stringify
enable: is_enable
@@ -15,11 +16,11 @@ $ ->
if window.confirm 'Are you sure?'
request '/billing/leave_plan/',
plan: $(@).parents('tr').data 'name'
, (result) ->
, ->
location.reload()
$('.action-join-plan').click ->
request '/billing/join_plan/',
plan: $(@).parents('tr').data 'name'
, (result) ->
, ->
location.reload()

View File

@@ -5,12 +5,12 @@ $ ->
request '/ticket/reply/',
id: id
content: $('.input-content').val()
, (result) ->
, ->
location.reload()
$('.action-update-status').click ->
request '/ticket/update_status/',
id: id
status: $(@).data 'status'
, (result) ->
, ->
location.reload()

View File

@@ -25,7 +25,7 @@
"rp-clean": "./bin/rp-clean.coffee"
},
"dependencies": {
"accept-language": "^1.2.0",
"negotiator": "^0.4.8",
"async": "^0.9.0",
"coffee-script": "^1.7.1",
"connect": "^2.17.3",