Auftragsausführung (Dialogflow)

Die Auftragsausführungslogik kann den Sprachstring verwenden, den sie in jeder Anfrage erhält, um die auf die Nutzenden reagieren. In diesem Leitfaden erfahren Sie, wie Sie in einer Cloud Functions-Funktion für Firebase, lokalisierten Antworten.

Lokalisierungsbibliotheken

Hier sind einige hilfreiche Bibliotheken, die dir dabei helfen, benutzerdefinierte Antworten für bestimmte Sprachen generieren:

  • Für allgemeine Zwecke: I18n-node (unser Diese Bibliothek wird in Beispielcode-Snippets verwendet.
  • Für allgemeine Zwecke: format.js
  • Zeitzone/Uhrzeitlokalisierung: moment.js (unser Diese Bibliothek wird in Beispielcode-Snippets verwendet.
  • Geld/Währung: numeral.js

Lokalisierte Antworten erstellen

In diesem Abschnitt erfahren Sie, wie Sie lokalisierte Zeichenfolgenressourcen-Dateien erstellen, die lokalisierten Strings enthalten und wie Sie diese Ressourcendateien in Ihrer Cloud Funktion für die Firebase-Auftragsausführung.

So erstellst du lokalisierte Antworten:

  1. Erstellen Sie im selben Verzeichnis, in dem sich auch die Dateien package.json und index.js befinden, ein locales-Verzeichnis für deine lokalisierten Stringdateien. Wir verweisen darauf als <project-dir>/functions/locales.
  2. Erstellen Sie eine Ressourcendatei, die lokalisierte Strings für jedes Gebietsschema enthält, das die Sie unterstützen möchten. Wenn Sie beispielsweise en-US, en-GB, und de-DE Sprachen mit lokalisierten Willkommens- und Datumsnachrichten, werden diese Dateien könnte wie folgt aussehen:

    <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. Deklarieren Sie in der Datei package.json die i18n-Knoten- und Momentbibliotheken als Abhängigkeiten:

    {
     ...
     "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. Deklarieren Sie in der Datei index.js die Abhängigkeiten für den i18n-Knoten und Moment Bibliotheken:

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

  5. Konfigurieren Sie in der Datei index.js den i18n-Knoten mit Ihren unterstützten Sprachen:

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

  6. Legen Sie die Sprache für die Bibliotheken mit conv.user.locale aus der Clientbibliothek fest. Property.

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

  7. Rufe ask() mit einem lokalisierten String auf, um eine lokalisierte Antwort zurückzugeben. von i18n zurückgegeben. Dieses Snippet enthält auch eine Funktion, die , um ein lokalisiertes Datum zurückzugeben:

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

Hier sehen Sie eine vollständige index.js-Datei als Beispiel:

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