執行要求 (Dialogflow)

執行要求邏輯可使用在每個要求中收到的語言代碼字串, 為使用者提供回覆本指南將說明如何使用 在 Cloud 函式中傳回本地化程式庫 本地化回應

本地化程式庫

以下列舉幾個實用的程式庫供您參考 生成特定語言代碼的自訂回應:

  • 一般用途:I18n-node (我們的 程式碼片段範例使用這個程式庫)
  • 一般用途:format.js
  • 時區/時間本地化:moment.js (我們的 程式碼片段範例使用這個程式庫)
  • 金額/貨幣:numeral.js

建立本地化回應

本節將說明如何建立本地化字串資源檔案, 包含本地化字串,以及如何在 Cloud 中使用這些資源檔案 Firebase 執行要求的函式。

如何建立本地化回應:

  1. package.jsonindex.js 檔案所在的目錄中,為本地化字串檔案建立 locales 目錄。以下影片將說明 <project-dir>/functions/locales 格式的檔案。
  2. 建立資源檔案,其中包含各個語言代碼的本地化字串 以及您要提供支援的內容舉例來說,如果要支援 en-USen-GB、 和 de-DE 語言代碼含有本地化的歡迎和日期訊息,這些檔案 看起來會像這樣:

    <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. package.json 檔案中,宣告 i18n 節點和 PM 程式庫為 dependencies:

    {
     ...
     "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. index.js 檔案中,宣告 i18n 節點和時刻的依附元件 程式庫:

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

  5. index.js 檔案中,使用支援的語言代碼設定 i18n-node:

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

  6. 使用用戶端程式庫中的 conv.user.locale 設定程式庫的語言代碼 資源。

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

  7. 如要傳回本地化回應,請使用本地化字串呼叫 ask() i18n 回傳這個程式碼片段也包含使用時刻的函式 傳回本地化日期:

    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')));
    });

以下是完整的 index.js 檔案範例:

'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);