alexa-sdkでの多言語対応とalexa-conversationでのテスト方法
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の6日目の記事です。 alexa-sdkはi18nextでの多言語化に対応しています。 該当コード:http […]
広告ここから
広告ここまで
目次
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の6日目の記事です。
alexa-sdkはi18nextでの多言語化に対応しています。
該当コード:https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/alexa.js#L5
Hello Worldを英独に対応させる
翻訳文章のセットアップ
以下の様な書き方で翻訳テキストをセットアップします。
const languageStrings = {
'en-US': {
'translation': {
'SAY_HELLO_MESSAGE': 'Hello World!'
}
},
'de-DE': {
'translation': {
'SAY_HELLO_MESSAGE': 'Hallo Welt!'
}
}
}
module.exports = languageStrings
翻訳文章の読み込み
alexa.resources
に先ほど作成したオブジェクトを読み込ませればOKです。
const Alexa = require('alexa-sdk')
const handlers = require('./handlres')
const languageStrings = require('./lang')
module.exports.handler = function (event, context, callback) {
const alexa = Alexa.handler(event, context)
alexa.resources = languageStrings
alexa.registerHandlers(handlers)
alexa.execute()
}
alexa-conversationでの多言語テスト
alexa-conversationでも多言語のテストが可能です。
conversation
の引数にlocale = 'de-DE
と入れることで、ドイツ語のレスポンスに切り替わっていることが確認できます。
const conversation = require('alexa-conversation')
const app = require('../../index.js')
const opts = {
appId: 'your-app-id',
app: app,
handler: app.handler
}
opts.name = 'Say Hello world in English'
conversation(opts)
.userSays('LaunchRequest')
.plainResponse
.shouldContain('Hello World!')
.end()
opts.locale = 'de-DE'
conversation(opts)
.userSays('LaunchRequest')
.plainResponse
.shouldContain('Hallo Welt!')
.end()
で、日本語は?
日本語のkeyはja-JP
です。
なので以下の様に値を追加してやることで、日独英に対応したHello Worldスキルを作ることができます。
const languageStrings = {
'en-US': {
'translation': {
'SAY_HELLO_MESSAGE': 'Hello World!'
}
},
'de-DE': {
'translation': {
'SAY_HELLO_MESSAGE': 'Hallo Welt!'
}
},
'ja-JP': {
'translation': {
'SAY_HELLO_MESSAGE': 'こんにちは!'
}
}
}
テストも同様です。
const conversation = require('alexa-conversation')
const app = require('../../index.js')
const opts = {
appId: 'your-app-id',
app: app,
handler: app.handler
}
opts.name = 'Say Hello world in English'
conversation(opts)
.userSays('LaunchRequest')
.plainResponse
.shouldContain('Hello World!')
.end()
opts.name = 'Say Hello world in German'
opts.locale = 'de-DE'
conversation(opts)
.userSays('LaunchRequest')
.plainResponse
.shouldContain('Hallo Welt!')
.end()
opts.name = 'Say Hello world in Japanese'
opts.locale = 'ja-JP'
conversation(opts)
.userSays('LaunchRequest')
.plainResponse
.shouldContain('こんにちは!')
.end()