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

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

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

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

  • सामान्य मकसद: 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-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);