🌐
【多言語対応】Firebase Cloud Functions で i18next を使う
概要
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