מילוי הזמנות (Dialogflow)

הלוגיקה של מילוי ההזמנה יכולה להשתמש במחרוזת הלוקאל שהיא מקבלת בכל בקשה כדי להציג תשובות למשתמשים. במדריך הזה מתואר איך להשתמש בספריות התאמה לשוק המקומי של צד שלישי בתוך פונקציה ב-Cloud Functions for Firebase כדי להחזיר תגובות מקומיות.

ספריות לוקליזציה

ריכזנו כאן כמה ספריות שימושיות שתוכלו להיעזר בהן כדי ליצור תשובות מותאמות אישית ללוקאלים ספציפיים:

  • מטרה כללית: I18n-node (קטעי הקוד לדוגמה שלנו משתמשים בספרייה זו)
  • מטרה כללית: format.js
  • לוקליזציה של אזור זמן/זמן: moment.js (קטעי הקוד לדוגמה שלנו משתמשים בספרייה זו)
  • כסף/מטבע: numeral.js

יצירת תשובות מותאמות לשוק המקומי

בקטע הזה נסביר איך ליצור קובצי משאבים של מחרוזת שהותאמו לשוק המקומי שמכילים מחרוזות שמותאמות לשוק המקומי, ואיך להשתמש בקובצי המשאבים האלה במילוי הפונקציה ב-Cloud Functions for Firebase.

כדי ליצור תשובות שהותאמו לשוק המקומי:

  1. באותה ספרייה שבה נמצאים קובצי package.json ו-index.js, יוצרים את הספרייה locales לקובצי המחרוזות שמותאמות לשוק המקומי. אנחנו נתייחס לספרייה הזו בתור <project-dir>/functions/locales.
  2. יוצרים קובץ משאב שמכיל מחרוזות שמותאמות לשוק המקומי לכל לוקאל שרוצים לתמוך בו. לדוגמה, אם רוצים לתמוך בלוקאלים של en-US, en-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-node וספריות רגע:

    {
     ...
     "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 בהתאם ללוקאלים הנתמכים:

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