Fulfillment (Dialogflow)

Logika pemenuhan Anda dapat menggunakan string lokalitas yang diterima dalam setiap permintaan untuk yang melayani respons pengguna. Panduan ini menunjukkan cara menggunakan beberapa informasi library pelokalan dalam Cloud Function for Firebase untuk ditampilkan respons yang dilokalkan.

Library pelokalan

Berikut ini beberapa library bermanfaat yang dapat dipertimbangkan untuk membantu Anda membuat respons yang disesuaikan untuk lokalitas tertentu:

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

Buat respons yang dilokalkan

Bagian ini menampilkan cara membuat file resource string terlokalkan yang berisi string yang dilokalkan dan cara menggunakan file resource ini di Cloud Anda Fungsi untuk fulfillment Firebase.

Untuk membuat respons yang dilokalkan:

  1. Di direktori yang sama dengan file package.json dan index.js Anda, buat direktori locales untuk file string yang dilokalkan. Kita akan merujuk pada direktori sebagai <project-dir>/functions/locales.
  2. Membuat file sumber daya yang berisi string yang dilokalkan untuk setiap lokal yang yang ingin Anda dukung. Misalnya, jika Anda ingin mendukung en-US, en-GB, dan de-DE lokalitas 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 node i18n dan momen 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 node dan momen i18n {i>library<i}:

    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. Menetapkan lokalitas untuk library menggunakan conv.user.locale dari library klien saat ini.

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