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

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

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

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

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

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

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

    {
     ...
     "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);