多言語対応スキルをサクッと作る

Alexa スキル開発多言語対応

多言語対応が思ったよりもかんたんでサクッとできたので、まとめてみました!

alexa developer console に言語を追加する

通常左上に「日本語」と書かれている箇所のプルダウンから「言語設定」を選びます。

「新しい言語を追加」を押します。

言語が出てくるので、追加したい言語をクリックすれば追加されます。外したい場合は、右側の「停止」をクリックすれば外すことが出来ます。

ロケールコードを確認

まずはこちらからロケールコードを確認します。

よく使うところで言うと、日本は "ja-JP"、アメリカは "en-US"、イギリスが "en-GB" です。

ロケール判別の関数を作る

各ハンドラの中に毎回書くのは面倒なので、関数として作っておきます。

同じ英語圏でもロケールは異なるので、このリストを作っておくと便利。

const EN_LOCALE = ['en-US', 'en-AU', 'en-CA', 'en-GB', 'en-IN'];

関数はこちら。

function RecognizeLocale(handlerInput){
 let locale = handlerInput.requestEnvelope.request.locale;
 let id:
 
 if( locale === 'ja-JP')
 {
  id = 0;
 }
 else if( EN_LOCALE.includes(locale) ){
  id = 1;
 }
 else if( locale === 'de-DE' ){
   id = 2;
 }
 else{
  id = 1;
 }

  return id;
}

handlerInput.requestEnvelope.request.locale」にロケールコードが入ってくるので、それを変数に格納して使っています。

この関数では、日本語なら 0、英語なら 1、ドイツ語なら 2 を返すようにしています。

alexa developer console で登録していないロケールは入ってこないはずですが、一応「それ以外」を用意して「英語」にしています。(もっと丁寧にするなら、「それ以外」の場合は「あなたの国では使えません」と英語で返してスキルを終了する、という感じでしょうか)

言語別にメッセージを変える

ロケールが判別できれば、各ハンドラで返すメッセージの出し分けも可能になります。

const LaunchRequestHandler = {
 canHandle(handlerInput) {
   return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
 },
 handle(handlerInput) {
   let message;
   let locale = RecognizeLocale(handlerInput);

   if(locale === 0)
   {
    message = '日本語';
   }
   else if(locale === 2)
   {
    message = 'Deutsche';
   }
   else{
    message = 'English';
   }

   return handlerInput.responseBuilder
    .speak(message)
    .withShouldEndSession(true)
    .getResponse();
}

もしくは、メッセージをリストにしておくと if 文なしで書くこともできます。

let locale = RecognizeLocale(handlerInput);
let messages = ['日本語','English','Deutsche'];

message = messages[locale];

サンプルフレーズ

スキルを申請するには、スキルストアの表示用にサンプルフレーズ(開始フレーズ)を登録する必要があります。

開始フレーズの書き方は、「ユーザーによるカスタムスキルの呼び出し」のページから確認できます。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitter でaoxaをフォローしよう!