Fulfillment (Dialogflow)

Logika fulfillment Anda dapat menggunakan string lokalitas yang diterimanya di setiap permintaan untuk merespons pengguna. Panduan ini menunjukkan cara menggunakan beberapa library pelokalan pihak ketiga dalam Cloud Function for Firebase untuk menampilkan respons yang dilokalkan.

Library pelokalan

Berikut ini beberapa library berguna yang dapat dipertimbangkan untuk membantu Anda menghasilkan respons yang disesuaikan untuk lokalitas tertentu:

  • Tujuan umum: I18n-node (cuplikan kode contoh kami menggunakan library ini)
  • Tujuan umum: format.js
  • Pelokalan zona waktu/waktu: moment.js (contoh cuplikan kode kami menggunakan library ini)
  • Uang/mata uang: numeral.js

Membuat respons yang dilokalkan

Bagian ini menunjukkan cara membuat file resource string yang dilokalkan yang berisi string yang dilokalkan dan cara menggunakan file resource ini dalam fulfillment Cloud Functions for Firebase.

Untuk membuat respons yang dilokalkan:

  1. Dalam direktori yang sama dengan file package.json dan index.js Anda, buat direktori locales untuk file string yang dilokalkan. Kita akan menyebut direktori ini sebagai <project-dir>/functions/locales.
  2. Buat file resource yang berisi string yang dilokalkan untuk setiap lokalitas yang ingin Anda dukung. Misalnya, jika Anda ingin mendukung lokalitas en-US, en-GB, dan de-DE dengan pesan selamat datang dan tanggal yang dilokalkan, file tersebut akan terlihat seperti ini:

    <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. Dalam file package.json, deklarasikan library momen dan node i18n sebagai dependensi:

    {
     ...
     "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. Dalam file index.js, deklarasikan dependensi untuk library momen dan node i18n:

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

  5. Dalam file index.js, konfigurasikan node i18n dengan lokalitas yang didukung:

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

  6. Setel lokalitas untuk library menggunakan conv.user.locale dari properti library klien.

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

  7. Untuk menampilkan respons yang dilokalkan, panggil ask() dengan string yang dilokalkan yang ditampilkan oleh i18n. Cuplikan ini juga berisi fungsi yang menggunakan momen untuk menampilkan tanggal yang dilokalkan:

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

Berikut adalah file index.js lengkap sebagai contoh:

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