注意事項
この記事は、Notion AIに対して
- 問題と解決策の概要
- 例示用のコード
を渡して生成した実験的な記事になります。
はじめに
Webサイトを国際化するにあたり、まずはi18n対応を行うことにしました。
しかし、時間の制約があったため、暫定的な対応を行うことになりました。
i18n対応の暫定的な実装
初めに next-i18next
を導入したのですが、SSG時にエラーが発生することが分かりました。
そのため、せっかくなので独自実装に切り替えました。
自前実装では、Contextで現時点での言語設定を一時的に保存し、必要に応じてURLの切り替えや出力するテキストを切り替えるようにしています。
この切り替えでは、前提作業が多いため簡単に書いておくと、
- _appx.tsxで
I18nApp(App)
のようにApp関数をラップする src/locales/ja.json
などの言語ファイルのJSONを作成するuseTranslation
などを使って言語ファイルからテキストを読み取れるようにする- 言語切り替えしたいページを
src/pages/[locale]/X.tsx
に配置する
といった手順で切り替えることができます。
これは元々使っていたnext-i18next
に比較的近いインターフェースにしておきました。
またこの実装では、各言語ごとのディレクトリと、必要なファイルが作成されます。
. ├── index.html ├── about.html ├── portfolio.html ├── work.html ├── ja.html ├── en │ ├── about.html │ ├── portfolio.html │ └── work.html ├── ja ├── about.html ├── portfolio.html └── work.html
例えば、/about
であれば、/en/about
と/ja/about
を含めた3ページが実際に生成されることになります。
言語切り替えのUI
言語切り替えのUIは、 src/components/Layout/MainLayout.tsx にある LanguageSelect というComponentとして実装しました。
このUIを使うことで、簡単に言語を切り替えることができます。
各言語での表示例
各言語での表示を書いて紹介します。
結論
今回は、Webサイトのi18n対応について、暫定的な対応を行いました。
ただし、現在は独自実装に切り替えているため、今後の改善が必要です。今後も、Webサイトの改善に取り組んでいきます!