函数 t 在最新的 i18next 版本中未正确绑定

Function t is not binding correctly in latest i18next versions

下面的代码(Alexa 技能的本地化拦截器)适用于 i18next 版本 10.5.0,但不适用于最新版本。它收到一条函数 t 未被识别的消息,似乎 t 未正确绑定。

我找不到为什么会这样(我不知道 i18next 更新了什么)。任何人都可以阐明这一点吗?

// This request interceptor will bind a translation function 't' to the requestAttributes object
const LocalizationInterceptor = {
  process(handlerInput) {
    const localizationClient = i18n.use(sprintf).init({
      lng: handlerInput.requestEnvelope.request.locale,
      fallbackLng: 'en',
      overloadTranslationOptionHandler: sprintf.overloadTranslationOptionHandler,
      resources: languageStrings,
      returnObjects: true
    });
    const attributes = handlerInput.attributesManager.getRequestAttributes();
    attributes.t = function (...args) {
      return localizationClient.t(...args);
    }
  }
}

似乎 t 必须作为最新版本中 Promise 的延续来处理,所以这里是解决方案:

// This request interceptor will bind a translation function 't' to the requestAttributes.
const LocalizationRequestInterceptor = {
    process(handlerInput) {
        i18n.use(sprintf).init({
            lng: handlerInput.requestEnvelope.request.locale,
            resources: languageStrings,
            overloadTranslationOptionHandler: sprintf.overloadTranslationOptionHandler,
        }).then((t) => {
            const attributes = handlerInput.attributesManager.getRequestAttributes();
            attributes.t = (...args) => t(...args);
        });
    },
};