mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-12 22:27:09 +08:00
i18n translator
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user