我正在使用node-cldr库(https://github.com/papandreou/node-cldr)进行本地化,并为各个国家/地区提供选项列表http://pastebin.com/jyM5pCLn
territoriesList = cldr.extractTerritoryDisplayNames('en')
countries = _(territoriesList)
.pairs()
.filter (pair) -> isNaN(pair[0])
.zipObject()
.value()
app = express()
maxAgesOption = { maxAge: 86400000 * 30 }
if not config.server.compressAssets then maxAgesOption.maxAge = 0
i18next.backend(gettextSync)
i18next.init(i18nextOptions)
i18next.registerAppHelper(app)
app
.use( '/css', express.static( "public/css", maxAgesOption) )
.use( '/js', express.static( "public/js", maxAgesOption) )
...
.set( "countries", countries )
目前,我在'en'
设置territoriesList = cldr.extractTerritoryDisplayNames('en')
如何从请求中将lang-code推送到此处?
我有这个
.use (req, res, next) ->
code = i18next.lng().substr(0, 2)
territoriesList = cldr.extractTerritoryDisplayNames(code)
countries = []
regions = []
territories = __.each territoriesList, (value, index, list) ->
if (isNaN(index))
countries[index] = value
else
regions[index] = value
但这是为每个请求做的,因为它像中间件一样被添加,即使对于image / css请求,中间件也会为每个请求运行。
但由于这些值不会在请求之间发生变化,只有当用户更改语言时,它才不应该是中间件?
任何建议都非常感激。
答案 0 :(得分:0)
使用中间件。中间件将根据app.use声明位置执行。如果您在没有语言轮换的情况下发送用户css或图像,请在.use(' / js',express.static(" public / js",maxAgesOption))之后添加此中间件;
对于性能问题,您可以使用任何内存缓存存储,例如Redis。始终从内存存储中获取用户语言代码,当用户更新其设置时,只需将值更改为该用户的内存存储。