처리 (Dialogflow)

처리 로직은 모든 요청에서 수신한 언어 문자열을 사용하여 사용자 응답을 수용하기 위해서입니다. 이 가이드에서는 Google Cloud Platform을 사용해 Firebase용 Cloud 함수 내에서 현지화 라이브러리가 반환 응답을 현지화하는 데 도움이 됩니다

현지화 라이브러리

다음과 같은 유용한 라이브러리를 제공합니다. 특정 언어에 대한 맞춤형 응답 생성:

  • 범용: I18n-node( 예시 코드 스니펫에서 이 라이브러리를 사용)
  • 범용: format.js
  • 시간대/시간 현지화: moment.js (Google 예시 코드 스니펫에서 이 라이브러리를 사용)
  • 돈/통화: numeral.js

현지화된 대답 만들기

이 섹션에서는 현지화된 문자열과 Cloud에서 이러한 리소스 파일을 사용하는 방법을 알아보세요. Firebase fulfillment의 함수입니다.

현지화된 대답을 만들려면 다음 단계를 따르세요.

  1. package.jsonindex.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 및 시점 라이브러리를 다음과 같이 선언합니다. 종속 항목:

    {
     ...
     "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 및 순간의 종속 항목을 선언합니다. 라이브러리:

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

  5. index.js 파일에서 지원되는 언어로 i18n-node를 구성합니다.

    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()를 호출합니다. 확인할 수 있습니다 이 스니펫에는 모멘트를 사용하는 함수도 포함되어 있습니다. 다음과 같이 현지화된 날짜를 반환합니다.

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