【问题标题】:Change day/month language in DialogFlow bot在 DialogFlow 机器人中更改日/月语言
【发布时间】:2020-10-26 22:32:02
【问题描述】:

我正在使用 DialogFlow 为一家意大利餐厅创建助手。

我已将语言设置为西班牙语,一切似乎都很好,但是当我显示预订的最后日期时,它以英语显示(周五和五月在附件图片的情况下)。

可以改吗?

这是生成上述对餐桌预订过程的特定响应的代码:

function createBooking(agent) {
    let guests = agent.parameters.comensales;
    let time = new Date(agent.parameters.time);
    let date = new Date(agent.parameters.date);
    let bookingDate = new Date(date);
    var numeroReserva = Math.random().toString(16).slice(2, 8).toUpperCase();
    bookingDate.setHours(time.getHours());
    bookingDate.setMinutes(time.getMinutes());
    let now = new Date();

    if (guests < 1){
        agent.add('You need to reserve a table for at least one person. Please try again!');
    } else if (bookingDate < now){
        agent.add(`No puedes reservar una fecha pasada. Por favor, inténtalo de nuevo!`);
    } else if (bookingDate.getFullYear() > now.getFullYear()) {
        agent.add(`No puedes hacer una reserva para ${bookingDate.getFullYear()} todavía. Por favor, elige una fecha en ${now.getFullYear()}.`);
    } else {
        let timezone = parseInt(agent.parameters.time.toString().slice(19,22));
        bookingDate.setHours(bookingDate.getHours() + timezone);
        agent.add(`Perfecto. He reservado una mesa para ${guests} el ${bookingDate.toString().slice(0,21)}`);
        agent.add(`Tu código de reserva es: ${numeroReserva}`);
        agent.add('Nos vemos pronto!');
        agent.add('Buon appetito!');
    }
  }

【问题讨论】:

  • 您如何填充响应?它是 webhook 还是其他机制?如果您能详细说明如何构建响应,我认为这会有所帮助。
  • @Kolban 你说得对,我应该详细说明。我正在使用 Fulfillment 并使用我刚刚在问题中附加的 js 函数。

标签: dialogflow-es chatbot


【解决方案1】:

运行实现的代码在 Google 的计算基础架构中运行,该基础架构的默认语言环境/语言为美国英语。当一个请求从 Dialog flow 到达时,该请求会携带我们用来响应的语言。请参阅Webhook Request JSON 中的languageCode。当我们在 Node.js 中使用 API 时,看起来这些数据在 agent.locale 属性中可用。

查看 JavaScript Date 对象,我们似乎有一个名为 toLocaleString() 的方法,它将日期/时间转换为字符串,但另外提供用于创建特定语言内容的语言(区域设置)和格式。如果我们将所有这些放在一起,我们可能会发现以下代码行可能会起作用:

agent.add(`Perfecto. He reservado una mesa para ${guests} el ${bookingDate.toLocalString(agent.locale).slice(0,21)}`);

这可能需要一些测试才能正确。我首先记录 agent.locale 作为测试,以确保它具有我们期望/希望的值。

【讨论】:

  • 感谢您的解释和回复。我尝试使用 toLocaleString 方法进行许多组合,但它所做的只是将其更改为“欧洲”格式(例如,今天是:2019-5-8),但它不会将日期转换为工作日/月。也试过这个:bookingDate.toLocaleString('es','ES') 但结果相同
  • 您能否发布一个示例,说明您编码的内容、您看到的内容以及您希望看到的内容?另请详细阅读...developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 似乎有很多可能的选择。
  • 我想要的输出将是您附加的示例的第一个输出。在帖子的图像中,你有我最初得到的输出,这也是需要的,但只是将工作日和月份更改为西班牙语。 bookingDate.toLocaleDateString('es-ES',options).slice(0,21) 使用此行(与您的示例中的选项相同)我得到了这个:Perfecto。 He reservado una mesa para 5 el 2019 M05 9, Thu
  • 我们可能正在走出 DialogFlow 领域并进入 JavaScript 原生领域。想象一下没有涉及 DialogFlow,而您想将日期格式化为您选择的格式……我们可以这样做吗?看起来像momentjs.com 这样的包看起来可以提供帮助。
  • 那个库看起来很有趣,谢谢。 DialogFlow 编辑器是否允许库导入?问题是,让我们忘记格式,假设我对原始帖子图像的格式很满意。主要问题是将工作日/月份翻译成西班牙语,这就是我不知道该怎么做。
【解决方案2】:

已经很晚了,但对于那些面临这个问题的人来说。你知道你可以这样做:

let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', 
                hour12: false, hour: 'numeric', minute: 'numeric' };
var curr_date = new Date();
agent.add(`Sono le ` + curr_date.toLocaleString('it-IT', options));

【讨论】:

    【解决方案3】:

    如果有人喜欢使用 moment.js

    您可以从履行内联编辑器将库添加到您的项目。 转到Fulfillment,点击“package.json”

    在依赖项中添加以下行

    "moment": "^2.24.0",
    "moment-timezone": "^0.5.31"
    

    然后回到 index.js 并添加以下行来导入它

    const moment = require('moment-timezone');

    然后你可以在你的函数中这样处理

    if(agent.locale === 'en'){
             moment.locale('en-US');
             agent.add(`Now is ` + moment().tz(your_time_zone).format('LLLL'));
           }
           else if(agent.locale === 'it-IT' || agent.locale === 'it'){
             moment.locale('it');
             agent.add(`Sono le ` + moment().tz(your_time_zone).format('LLLL'));
           }
    

    回复样本为“ Sono le martedì 20 ottobre 2020 15:30” 或“现在是 2020 年 10 月 20 日星期二下午 3:31”

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      相关资源
      最近更新 更多