फ़ुलफ़िलमेंट (Dialogflow)

आपका फ़ुलफ़िलमेंट लॉजिक, सिस्टम के हर अनुरोध में मिलने वाली स्थानीय स्ट्रिंग का इस्तेमाल कर सकता है उपयोगकर्ताओं को जवाब दे सकता है. इस गाइड में, तीसरे पक्ष की सेवाओं के इस्तेमाल का तरीका बताया गया है Firebase के लिए Cloud Function में, स्थानीय भाषा के अनुसार लाइब्रेरी स्थानीय जगह के हिसाब से जवाब देना.

स्थानीय भाषा के अनुसार लाइब्रेरी

यहां कुछ लाइब्रेरी दी गई हैं जो आपकी मदद कर सकती हैं विशिष्ट स्थान-भाषाओं के लिए कस्टमाइज़्ड रिस्पॉन्स जनरेट करें:

  • सामान्य मकसद: I18n-node (हमारे उदाहरण के कोड स्निपेट में इस लाइब्रेरी का इस्तेमाल किया गया है)
  • सामान्य मकसद: format.js
  • टाइमज़ोन/टाइम लोकलाइज़ेशन: moment.js (हमारा उदाहरण के लिए कोड स्निपेट इस लाइब्रेरी का उपयोग करते हैं)
  • पैसा/मुद्रा: numeral.js

स्थानीय भाषा में जवाब बनाएं

इस सेक्शन में, स्थानीय भाषा में मौजूद स्ट्रिंग वाली स्ट्रिंग रिसॉर्स फ़ाइलें बनाने का तरीका बताया गया है. साथ ही, Firebase फ़ुलफ़िलमेंट के लिए, अपने Cloud फ़ंक्शन में इन रिसॉर्स फ़ाइलों का इस्तेमाल करने का तरीका भी बताया गया है.

स्थानीय भाषा में जवाब देने के लिए:

  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-नोड और मोमेंट लाइब्रेरी का एलान इस तरह करें 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-नोड को उन स्थान-भाषाओं के साथ कॉन्फ़िगर करें जो इसके साथ काम करती हैं:

    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 के ज़रिए वापस किया गया. इस स्निपेट में एक फ़ंक्शन भी है, जो स्थानीय भाषा में तारीख दिखाने के लिए, moment का इस्तेमाल करता है:

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