İstek karşılama (Dialogflow)

Sipariş karşılama mantığınız, kullanıcılara verilen yanıtları sunmak için her istekte aldığı yerel ayar dizesini kullanabilir. Bu kılavuzda, yerelleştirilmiş yanıtlar döndürmek için Cloud Functions for Firebase'deki bazı üçüncü taraf yerelleştirme kitaplıklarının nasıl kullanılacağı gösterilmektedir.

Yerelleştirme kitaplıkları

Belirli yerel ayarlar için özelleştirilmiş yanıtlar oluşturmanıza yardımcı olacak bazı faydalı kitaplıkları burada bulabilirsiniz:

  • Genel amaçlı: I18n-node (örnek kod snippet'lerimiz bu kitaplığı kullanır)
  • Genel amaçlı: format.js
  • Saat dilimi/saat yerelleştirmesi: moment.js (örnek kod snippet'lerimiz bu kitaplığı kullanır)
  • Para/para birimi: numeral.js

Yerelleştirilmiş yanıtlar oluşturma

Bu bölümde, yerelleştirilmiş dizeler içeren yerelleştirilmiş dize kaynağı dosyalarının nasıl oluşturulacağı ve bu kaynak dosyalarının Firebase için Cloud Functions istek karşılamasında nasıl kullanılacağı gösterilmektedir.

Yerelleştirilmiş yanıtlar oluşturmak için:

  1. package.json ve index.js dosyalarınızla aynı dizinde, yerelleştirilmiş dize dosyalarınız için bir locales dizini oluşturun. Bu dizinden <project-dir>/functions/locales olarak bahsedeceğiz.
  2. Desteklemek istediğiniz her yerel ayar için yerelleştirilmiş dizeler içeren bir kaynak dosyası oluşturun. Örneğin, en-US, en-GB ve de-DE yerel ayarlarını yerelleştirilmiş karşılama ve tarih mesajlarıyla desteklemek isterseniz bu dosyalar aşağıdaki gibi görünebilir:

    <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 dosyasında, i18n-node ve moment kitaplıklarını bağımlılık olarak tanımlayın:

    {
     ...
     "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 dosyasında, i18n-node ve moment kitaplıklarının bağımlılıklarını tanımlayın:

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

  5. index.js dosyasında, i18n-node'u desteklenen yerel ayarlarınızla yapılandırın:

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

  6. İstemci kitaplığı mülkünden conv.user.locale öğesini kullanarak kitaplıkların yerel ayarlarını belirleyin.

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

  7. Yerelleştirilmiş yanıt döndürmek için ask() yöntemini, i18n tarafından döndürülen yerelleştirilmiş bir dizeyle çağırın. Bu snippet'te, yerelleştirilmiş tarih döndürmek için moment kullanan bir işlev de bulunur:

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

Örnek olarak eksiksiz bir index.js dosyasını burada bulabilirsiniz:

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