Как заставить нетривиальный перевод i18n работать с использованием Sails.js ?

#node.js #internationalization #sails.js #i18n-node

#node.js #интернационализация #sails.js #i18n-узел

Вопрос:

Использование Sails.js версии 0.10.x и попытка заставить материал i18n работать.

У меня в моем config/locales/en.json

 {
  "countries": {
    "au": {
      "name": "Australia",
      "fiatCurrency": "AUD",
      "subnationalDivisions": {
        "NSW": "New South Wales",
        "WA": "Western Australia",
        "VIC": "Victoria",
        "QLD": "Queensland",
        "TAS": "Tasmania",
        "SA": "South Australia",
        "NT": "Northern Territory",
        "ACT": "Australian Capital Territory"
      }
    }
  }
}
  

Мой config/i18n.js файл выглядит так

 module.exports.i18n = {

  // Which locales are supported?
  locales: ['en', 'es', 'fr', 'de'],

  objectNotation: true

};
  

В моем контроллере я пытаюсь получить правильное subnationalDivision имя через

 res.i18n("countries."   country   ".subnationalDivisions."   state)
  

но это просто дает мне "countries.au.subnationalDivisions.ACT" , не "Australian Capital Territory"

Я проверил тривиальный пример:

Данный en.json файл, содержащий { "bingo" : "sparky" } , res.i18n("bingo") выводит "sparky"

Но примеры использования objectNotation не работают, несмотря на инструкции в документации i18n-node.

Как я должен заставить это работать?

Комментарии:

1. Вы можете попробовать l10ns . Он предоставляет вам формат сообщений ICU и синхронизирует ваш ключ перевода для вас. Таким образом, вы можете легче управлять файлами локализации

2. Я проверю это. Тем временем проблема, которую я описал, оказалась ошибкой в Sails (которую я исправил).

Ответ №1:

Проблема оказалась ошибкой в Sails — она использовала более старую версию i18n пакета. Я нашел и исправил ошибку и отправил PR команде Sails, и она была включена в v 0.10.3 Sails. (При текущей записи Sails теперь находится на 0.10.5)