Realizacja (Dialogflow)

Logika realizacji może używać ciągu lokalnego, który otrzymuje w każdym żądaniu, aby dostosować odpowiedzi użytkowników do ich potrzeb. Z tego przewodnika dowiesz się, jak za pomocą biblioteki lokalizacji w funkcji Cloud Functions dla Firebase, które mają zwrócić i zlokalizowanych odpowiedzi.

Biblioteki lokalizacji

Oto kilka bibliotek, które mogą okazać się pomocne Generuj dostosowane odpowiedzi dla określonych języków:

  • Przeznaczenie ogólne: I18n-node (nasz przykładowe fragmenty kodu korzystają z tej biblioteki)
  • Ogólne: format.js
  • Strefa czasowa i lokalizacja czasowa: moment.js (nasz przykładowe fragmenty kodu korzystają z tej biblioteki)
  • Pieniądze/waluta: numeral.js

Tworzenie zlokalizowanych odpowiedzi

Z tej sekcji dowiesz się, jak tworzyć zlokalizowane pliki zasobów z ciągami znaków, które zawiera zlokalizowane ciągi znaków i dowiedz się, jak używać tych plików zasobów w Google Cloud Funkcja związana z realizacją Firebase.

Aby utworzyć zlokalizowane odpowiedzi:

  1. W tym samym katalogu co pliki package.json i index.js utwórz katalogu locales na pliki ze zlokalizowanymi ciągami znaków. Będziemy się o tym nazywać katalogu pod adresem <project-dir>/functions/locales.
  2. Utwórz plik zasobów zawierający zlokalizowane ciągi znaków dla każdego języka, w którym które chcesz wspierać. Jeśli na przykład chcesz korzystać z en-US, en-GB, i de-DE języki ze zlokalizowanymi wiadomościami powitalnymi i datami. Te pliki może 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 węzła i18n-node biblioteki:

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

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

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

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

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

  7. Aby zwrócić zlokalizowaną odpowiedź, wywołaj ask() ze zlokalizowanym ciągiem znaków zwracanych przez i18n. Ten fragment kodu zawiera również funkcję, która wykorzystuje moment , aby zwrócić zlokalizowaną datę:

    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ład pełnego pliku 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);