【问题标题】:dynamically set countries for supported locales in express application在快速应用程序中为支持的语言环境动态设置国家
【发布时间】:2014-05-29 20:00:15
【问题描述】:

我正在使用 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 )

目前,我在territoriesList = cldr.extractTerritoryDisplayNames('en') 中设置'en' 如何将语言代码从请求中推送到这里?

我有这个

.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

但这对每个请求都执行此操作,因为它像中间件一样添加,中间件甚至会为每个请求运行,即使对于图像/css 请求也是如此。

但是由于这些值不会在请求之间改变,只有当用户改变语言时,它不应该是中间件?

非常感谢任何建议。

【问题讨论】:

    标签: node.js express coffeescript


    【解决方案1】:

    使用中间件。中间件将根据 app.use 声明位置执行。如果您发送用户 css 或图像而不使用语言旋转,请在 .use( '/js', express.static( "public/js", maxAgesOption) ); 之后添加此中间件;

    对于性能问题,您可以使用任何内存缓存存储,例如 Redis。始终从内存存储中获取用户语言代码,当用户更新他的设置时,只需将值更改为该用户的内存存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2020-04-05
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多