🌐

【多言語対応】Firebase Cloud Functions で i18next を使う

2022/07/12に公開

概要

Firebase Cloud Functions の多言語化に関する文献があまりなかったのでここに残しておきます。

今回は i18next という多言語対応ライブラリを使います。

手順

functions のディレクトリで i18next をインストール

npm i i18next

functions 配下に locales フォルダを作成、翻訳ファイルを作成

ディレクトリ構成
functions
├── locales
│   ├── en.json
│   └── ja.json
├── package-lock.json
├── package.json
├── src
│   └── index.ts
├── tsconfig.json
└── tslint.json
en.json
{
    "send_email": {
        "subject": "Registration Completed",
        "body": "Dear {{name}}\nThank you for registering.\nSupport Team"
    }
}
ja.json
{
    "send_email": {
        "subject": "登録完了",
        "body": "{{name}}様\nご登録ありがとうございます。\n運営チーム"
    }
}

index.ts で i18next を使う

src/index.ts
import * as functions from 'firebase-functions'
import * as i18next from 'i18next'
const en = require('../locales/en.json')
const ja = require('../locales/ja.json')

exports.sendEmail = functions.region('asia-northeast1').https.onCall(async (data) => {
    await i18next.init({
	// 使用する言語 'ja', 'en' 等
        lng: data.locale,
        resources: {
            en: {
                translation: en,
            },
            ja: {
                translation: ja,
            },
        },
        fallbackLng: {
            default: ['ja'],
        },
    })
    const email = {
        to: data.destination,
        subject: i18next.t('send_email.subject'),
        text: i18next.t('send_email.body', {
            name: data.name,
        }),
    }
    // ...
})

デプロイ

firebase deploy --only functions

Discussion