Выполнение (диалоговый поток)

Ваша логика выполнения может использовать строку языкового стандарта, которую она получает в каждом запросе, для обработки ответов пользователей. В этом руководстве показано, как использовать некоторые сторонние библиотеки локализации в облачной функции для Firebase для возврата локализованных ответов.

Библиотеки локализации

Вот несколько полезных библиотек, которые помогут вам генерировать индивидуальные ответы для конкретных языков:

  • Общее назначение: 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-node и moment как зависимости:

    {
     ...
     "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-node и moment:

    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. Этот фрагмент также содержит функцию, которая использует moment для возврата локализованной даты:

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