【问题标题】:Sailsjs change localizationSailsjs 更改本地化
【发布时间】:2026-02-07 11:30:01
【问题描述】:

我使用 Sails.js 已经有一段时间了,想知道是否有办法根据 url 手动更改控制器的本地化。

示例:http://example.com/en 将返回英文版本,http://example.com/de 将返回德文版本。

感谢您的帮助!!

【问题讨论】:

    标签: javascript node.js localization sails.js


    【解决方案1】:

    您始终可以通过使用req.setLocale() 或设置req.locale 的值来更改控制器操作中的区域设置。您还可以使用策略在全局范围内处理此问题:

    // config/routes.js
    
    module.export.routes = {
    
      '/:lang/': 'MyController.index',
      '/:lang/help': 'MyController.help',
      '/:lang/contact': 'MyController.contact',
      ...etc...
    
    }
    

    // config/policies.js
    
    module.exports.policies = {
    
       '*' : 'localize'
    
    }
    

    // api/policies/localize.js
    
    module.exports = function(req, res, next) {
    
       req.locale=req.param('lang');
       next();
    
    };
    

    【讨论】:

    • 没有控制器就无法设置区域设置?例如sails.setLocale?我正在使用 cronjob 挂钩,但我无法以这种方式访问​​ req。
    • @StasArshanski 不太清楚你的意思——你能打开一个新问题,详细说明你正在尝试做什么吗?
    • 是的,这里:*.com/questions/45532581/…
    • API 请求怎么样?例如:我们发送一个带有正文数据的 post 请求:{ lang: 'fr' } 或者在请求标头上设置一些内容。那么我们可以返回法语文本吗?
    【解决方案2】:

    将 2020 年更新为 @sgress454 的回答

    // api/policies/localize.js`

    module.exports = function(req, res, next) {
      // This worked for testing
      // You can use req.param('lang') instead of 'in'
      req.setLocale('in');
      next();
    
    };
    

    【讨论】: