codecombat/server/routes/languages.coffee
Sébastien Moratinos 729cd300b7 server reorganize files and folder by features
- move and rename files
- use associative arrays which store handlers for 'dynamically'
  load module from de db route
- store models_path in test/server/common,
  a global model variable has the same name that the filename of the model
2014-01-23 01:01:40 +01:00

49 lines
1.8 KiB
CoffeeScript

errors = require '../commons/errors'
winston = require 'winston'
locale = require '../../app/locale/locale' # requiring from app; will break if we stop serving from where app lives
module.exports.setupRoutes = (app) ->
app.all '/languages/add/:lang/:namespace', (req, res) ->
# Should probably store these somewhere
winston.info "#{req.params.lang}.#{req.params.namespace} missing an i18n key:", req.body
res.send('')
res.end()
app.all '/languages', (req, res) ->
# Now that these are in the client, not sure when we would use this, but hey
return errors.badMethod(res) if req.route.method isnt 'get'
res.send(languages)
return res.end()
languages = []
for code, localeInfo of locale
languages.push code: code, nativeDescription: localeInfo.nativeDescription, englishDescription: localeInfo.englishDescription
module.exports.languages = languages
module.exports.languageCodes = languageCodes = (language.code for language in languages)
module.exports.languageCodesLower = languageCodesLower = (code.toLowerCase() for code in languageCodes)
# Keep keys lower-case for matching and values with second subtag uppercase like i18next expects
languageAliases =
'en': 'en-US'
'zh-cn': 'zh-HANS'
'zh-hans-cn': 'zh-HANS'
'zh-sg': 'zh-HANS'
'zh-hans-sg': 'zh-HANS'
'zh-tw': 'zh-HANT'
'zh-hant-tw': 'zh-HANT'
'zh-hk': 'zh-HANT'
'zh-hant-hk': 'zh-HANT'
'zh-mo': 'zh-HANT'
'zh-hant-mo': 'zh-HANT'
module.exports.languageCodeFromAcceptedLanguages = languageCodeFromAcceptedLanguages = (acceptedLanguages) ->
for lang in acceptedLanguages ? []
code = languageAliases[lang.toLowerCase()]
return code if code
codeIndex = _.indexOf languageCodesLower, lang
if codeIndex isnt -1
return languageCodes[codeIndex]
return 'en-US'