Thực hiện đơn hàng (luồng hộp thoại)

Logic thực hiện của bạn có thể sử dụng chuỗi ngôn ngữ mà nó nhận được trong mọi yêu cầu để phân phối phản hồi cho người dùng. Hướng dẫn này cho bạn biết cách sử dụng một số thư viện bản địa hoá của bên thứ ba trong Chức năng đám mây cho Firebase để trả về các phản hồi đã bản địa hoá.

Thư viện bản địa hoá

Dưới đây là một số thư viện hữu ích nên xem xét để giúp bạn tạo câu trả lời tuỳ chỉnh cho các ngôn ngữ cụ thể:

  • Mục đích chung: I18n-node (đoạn mã ví dụ của chúng tôi sử dụng thư viện này)
  • Mục đích chung: format.js
  • Bản địa hoá múi giờ/thời gian: moment.js (đoạn mã mẫu của chúng tôi sử dụng thư viện này)
  • Tiền/đơn vị tiền tệ: numeral.js

Tạo câu trả lời đã bản địa hoá

Phần này cho bạn biết cách tạo tệp tài nguyên chuỗi đã bản địa hoá chứa các chuỗi đã bản địa hoá và cách sử dụng các tệp tài nguyên này trong phương thức thực hiện Cloud cho Firebase.

Cách tạo câu trả lời đã bản địa hoá:

  1. Trong cùng thư mục với các tệp package.jsonindex.js, hãy tạo một thư mục locales cho các tệp chuỗi đã được bản địa hoá. Chúng tôi sẽ gọi thư mục này là <project-dir>/functions/locales.
  2. Tạo một tệp tài nguyên chứa các chuỗi đã bản địa hoá cho mọi ngôn ngữ mà bạn muốn hỗ trợ. Ví dụ: nếu bạn muốn hỗ trợ các ngôn ngữ en-US, en-GBde-DE có thông báo chào mừng và thông báo ngày đã bản địa hoá, thì các tệp đó có thể có dạng như sau:

    <project-dir>/functions/locales/en-US.json

    {
       "WELCOME_BASIC": "Hello, welcome!",
       "DATE": "The date is %s"
    }
    

    <project-dir>/functions/locales/en-GB.json

    {
       "WELCOME_BASIC": "Hello, welcome!",
       "DATE": "The date is %s"
    }
    

    <project-dir>/functions/locales/de-DE.json

    {
       "WELCOME_BASIC": "Hallo und willkommen!",
       "DATE": "Das Datum ist %s"
    }
    
  3. Trong tệp package.json, hãy khai báo thư viện nút i18n và thư viện khoảnh khắc dưới dạng phần phụ thuộc:

    {
     ...
     "dependencies": {
       "actions-on-google": "^2.7.0",
       "firebase-admin": "^7.2.1",
       "firebase-functions": "^2.2.1",
       "i18n": "^0.8.3",
       "moment": "^2.22.1"
     }
    }
    
  4. Trong tệp index.js, hãy khai báo các phần phụ thuộc cho thư viện nút i18n và thư viện khoảnh khắc:

    const i18n = require('i18n');
    const moment = require('moment');

  5. Trong tệp index.js, hãy định cấu hình nút i18n bằng các ngôn ngữ được hỗ trợ:

    i18n.configure({
      locales: ['en-US', 'en-GB', 'de-DE'],
      directory: __dirname + '/locales',
      defaultLocale: 'en-US'
    });

  6. Đặt ngôn ngữ cho thư viện bằng cách sử dụng conv.user.locale từ thuộc tính thư viện ứng dụng.

    app.middleware((conv) => {
      i18n.setLocale(conv.user.locale);
      moment.locale(conv.user.locale);
    });

  7. Để trả về một phản hồi đã bản địa hoá, hãy gọi ask() với một chuỗi đã bản địa hoá do i18n trả về. Đoạn mã này cũng chứa một hàm sử dụng khoảnh khắc để trả về ngày đã bản địa hoá:

    app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n
      conv.ask(i18n.__('WELCOME_BASIC'));
    });
    
    app.intent('date', (conv) => { // must not be async for i18n
      conv.ask(i18n.__('DATE', moment().format('LL')));
    });

Dưới đây là một tệp index.js hoàn chỉnh làm ví dụ:

'use strict';
const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');
const i18n = require('i18n');
const moment = require('moment');

i18n.configure({
  locales: ['en-US', 'en-GB', 'de-DE'],
  directory: __dirname + '/locales',
  defaultLocale: 'en-US'
});

const app = dialogflow({debug: true});

app.middleware((conv) => {
  i18n.setLocale(conv.user.locale);
  moment.locale(conv.user.locale);
});

app.intent('Default Welcome Intent', (conv) => { // must not be async for i18n
  conv.ask(i18n.__('WELCOME_BASIC'));
});

app.intent('date', (conv) => { // must not be async for i18n
  conv.ask(i18n.__('DATE', moment().format('LL')));
});

exports.demoAction = functions.https.onRequest(app);