Traitement (Dialogflow)

Votre logique de fulfillment peut utiliser la chaîne de paramètres régionaux qu'elle reçoit dans chaque requête répondre aux utilisateurs. Ce guide vous explique comment utiliser des outils des bibliothèques de localisation dans une fonction Cloud et localisées.

Bibliothèques de localisation

Voici quelques bibliothèques utiles pour vous aider générer des réponses personnalisées pour des paramètres régionaux spécifiques:

  • Usage général: I18n-node (notre exemples d'extraits de code utilisent cette bibliothèque)
  • Usage général: format.js
  • Localisation du fuseau horaire/de l'heure: moment.js (notre exemples d'extraits de code utilisent cette bibliothèque)
  • Monnaie/devise: numeral.js

Créer des réponses localisées

Cette section vous explique comment créer des fichiers de ressources de chaîne localisées contenant des chaînes localisées et comment utiliser ces fichiers de ressources Fonction pour le fulfillment Firebase.

Pour créer des réponses localisées:

  1. Dans le même répertoire que vos fichiers package.json et index.js, créez un répertoire locales pour vos fichiers de chaînes localisées. Nous y reviendrons en tant que <project-dir>/functions/locales.
  2. Créez un fichier de ressources contenant les chaînes localisées pour tous les paramètres régionaux qui que vous souhaitez prendre en charge. Par exemple, si vous souhaitez prendre en charge en-US, en-GB, et de-DE paramètres régionaux avec des messages d'accueil et de date localisés, ces fichiers peut se présenter comme suit:

    <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. Dans le fichier package.json, déclarez les bibliothèques "i18n-node" et "Moment" en tant que dépendances:

    {
     ...
     "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. Dans le fichier index.js, déclarez les dépendances pour le nœud i18n et le moment. bibliothèques:

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

  5. Dans le fichier index.js, configurez le nœud i18n avec les paramètres régionaux pris en charge:

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

  6. Définissez les paramètres régionaux des bibliothèques à l'aide de conv.user.locale à partir de la bibliothèque cliente. .

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

  7. Pour renvoyer une réponse localisée, appelez ask() avec une chaîne localisée. renvoyées par i18n. Cet extrait contient également une fonction qui utilise le moment pour renvoyer une date localisée:

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

Voici un exemple de fichier index.js complet:

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