Realizacja (Dialogflow)

Logika realizacji zamówień może wykorzystywać ciąg znaków dotyczący regionu otrzymywany w każdym żądaniu w celu obsługi odpowiedzi użytkowników. W tym przewodniku pokazujemy, jak za pomocą funkcji w Cloud Functions dla Firebase używać niektórych zewnętrznych bibliotek lokalizacji do zwracania zlokalizowanych odpowiedzi.

Biblioteki lokalizacji

Oto kilka przydatnych bibliotek, które pomogą Ci w generowaniu odpowiedzi niestandardowych dla określonych języków:

  • Do zwykłych obciążeń: I18n-node (ta biblioteka jest przykładowa dla naszych przykładowych fragmentów kodu)
  • Do zwykłych obciążeń: format.js
  • Lokalizacja strefy czasowej i czasu: moment.js (nasz przykładowy kod korzysta z tej biblioteki)
  • Pieniądze/waluta: numeral.js

Twórz zlokalizowane odpowiedzi

W tej sekcji dowiesz się, jak utworzyć zlokalizowane pliki zasobów łańcuchowych, które zawierają zlokalizowane ciągi znaków, oraz jak używać tych plików zasobów w funkcji w Cloud Functions na potrzeby realizacji Firebase.

Aby utworzyć zlokalizowane odpowiedzi:

  1. W tym samym katalogu co pliki package.json i index.js utwórz katalog locales na zlokalizowane pliki tekstowe. Będziemy określać ten katalog jako <project-dir>/functions/locales.
  2. Utwórz plik zasobów zawierający zlokalizowane ciągi znaków dla każdego obsługiwanego języka. Jeśli na przykład chcesz obsługiwać języki en-US, en-GB i de-DE ze zlokalizowanymi wiadomościami powitalnymi i datami, pliki te mogą wyglądać tak:

    <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. W pliku package.json zadeklaruj biblioteki i18n-node i Moment jako zależności:

    {
     ...
     "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. W pliku index.js zadeklaruj zależności dla bibliotek węzłów i18n i bibliotek momentów:

    const i18n = require('i18n');
    const moment = require('moment');

  5. W pliku index.js skonfiguruj węzeł i18n z obsługiwanymi ustawieniami języka:

    i18n.configure({
      locales: ['en-US', 'en-GB', 'de-DE'],
      directory: __dirname + '/locales',
      defaultLocale: 'en-US'
    });

  6. Ustaw język dla bibliotek za pomocą polecenia conv.user.locale z usługi biblioteki klienta.

    app.middleware((conv) => {
      i18n.setLocale(conv.user.locale);
      moment.locale(conv.user.locale);
    });

  7. Aby zwrócić zlokalizowaną odpowiedź, wywołaj funkcję ask() ze zlokalizowanym ciągiem znaków zwracanym przez i18n. Ten fragment kodu zawiera też funkcję, która wykorzystuje moment do zwrócenia zlokalizowanej daty:

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

Oto przykładowy plik 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);