mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-30 12:32:35 +08:00
i18n translator
This commit is contained in:
@@ -2,15 +2,12 @@ path = require 'path'
|
|||||||
fs = require 'fs'
|
fs = require 'fs'
|
||||||
_ = require 'underscore'
|
_ = require 'underscore'
|
||||||
|
|
||||||
acceptLanguage = require 'accept-language'
|
|
||||||
stringify = require 'json-stable-stringify'
|
stringify = require 'json-stable-stringify'
|
||||||
|
|
||||||
utils = require './utils'
|
utils = require './utils'
|
||||||
cache = require './cache'
|
cache = require './cache'
|
||||||
config = require '../config'
|
config = require '../config'
|
||||||
|
|
||||||
acceptLanguage.default config.i18n.default_language.replace('_', '-')
|
|
||||||
|
|
||||||
i18n_data = {}
|
i18n_data = {}
|
||||||
|
|
||||||
for lang in config.i18n.available_language
|
for lang in config.i18n.available_language
|
||||||
@@ -23,29 +20,68 @@ exports.loadForPlugin = (plugin) ->
|
|||||||
if fs.existsSync path
|
if fs.existsSync path
|
||||||
i18n_data[lang]['plugins'][plugin.name] = require lang
|
i18n_data[lang]['plugins'][plugin.name] = require lang
|
||||||
|
|
||||||
exports.translate = (name, lang) ->
|
exports.parseLanguageCode = parseLanguageCode = (language) ->
|
||||||
unless lang
|
[lang, country] = language.replace('-', '_').split '_'
|
||||||
lang = config.i18n.default_language
|
|
||||||
|
|
||||||
|
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 = name.split '.'
|
||||||
keys.unshift lang
|
keys.unshift language
|
||||||
|
|
||||||
result = i18n_data
|
result = i18n_data
|
||||||
|
|
||||||
for item in keys
|
for item in keys
|
||||||
unless result[item] == undefined
|
if result[item] == undefined
|
||||||
|
return undefined
|
||||||
|
else
|
||||||
result = result[item]
|
result = result[item]
|
||||||
|
|
||||||
if result == undefined and lang != config.i18n.default_language
|
return result
|
||||||
return exports.translate name, config.i18n.default_language
|
|
||||||
else if _.isObject result
|
|
||||||
return name
|
|
||||||
else
|
|
||||||
return result
|
|
||||||
|
|
||||||
exports.getTranslator = (lang) ->
|
exports.translate = (name, req) ->
|
||||||
return (name) ->
|
priority_order = exports.calcLanguagePriority req
|
||||||
return exports.translate name, lang
|
|
||||||
|
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) ->
|
exports.initI18nData = (req, res, next) ->
|
||||||
timezone_mapping =
|
timezone_mapping =
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
$ ->
|
$ ->
|
||||||
$('#service-switch button').click ->
|
$('#service-switch button').click ->
|
||||||
|
# TODO: refactor
|
||||||
is_enable = if $(@).hasClass 'btn-success' then true else false
|
is_enable = if $(@).hasClass 'btn-success' then true else false
|
||||||
$.post "/plugin/#{$(@).data('name')}/switch/", JSON.stringify
|
$.post "/plugin/#{$(@).data('name')}/switch/", JSON.stringify
|
||||||
enable: is_enable
|
enable: is_enable
|
||||||
@@ -15,11 +16,11 @@ $ ->
|
|||||||
if window.confirm 'Are you sure?'
|
if window.confirm 'Are you sure?'
|
||||||
request '/billing/leave_plan/',
|
request '/billing/leave_plan/',
|
||||||
plan: $(@).parents('tr').data 'name'
|
plan: $(@).parents('tr').data 'name'
|
||||||
, (result) ->
|
, ->
|
||||||
location.reload()
|
location.reload()
|
||||||
|
|
||||||
$('.action-join-plan').click ->
|
$('.action-join-plan').click ->
|
||||||
request '/billing/join_plan/',
|
request '/billing/join_plan/',
|
||||||
plan: $(@).parents('tr').data 'name'
|
plan: $(@).parents('tr').data 'name'
|
||||||
, (result) ->
|
, ->
|
||||||
location.reload()
|
location.reload()
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ $ ->
|
|||||||
request '/ticket/reply/',
|
request '/ticket/reply/',
|
||||||
id: id
|
id: id
|
||||||
content: $('.input-content').val()
|
content: $('.input-content').val()
|
||||||
, (result) ->
|
, ->
|
||||||
location.reload()
|
location.reload()
|
||||||
|
|
||||||
$('.action-update-status').click ->
|
$('.action-update-status').click ->
|
||||||
request '/ticket/update_status/',
|
request '/ticket/update_status/',
|
||||||
id: id
|
id: id
|
||||||
status: $(@).data 'status'
|
status: $(@).data 'status'
|
||||||
, (result) ->
|
, ->
|
||||||
location.reload()
|
location.reload()
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
"rp-clean": "./bin/rp-clean.coffee"
|
"rp-clean": "./bin/rp-clean.coffee"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"accept-language": "^1.2.0",
|
"negotiator": "^0.4.8",
|
||||||
"async": "^0.9.0",
|
"async": "^0.9.0",
|
||||||
"coffee-script": "^1.7.1",
|
"coffee-script": "^1.7.1",
|
||||||
"connect": "^2.17.3",
|
"connect": "^2.17.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user