@intlayer/docs 5.8.0-canary.0 → 5.8.1-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +2 -2
  2. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  3. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  4. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  5. package/blog/de/intlayer_with_next-i18next.md +2 -2
  6. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  7. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  8. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  9. package/blog/en/intlayer_with_next-i18next.md +2 -2
  10. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +88 -120
  12. package/blog/en/vue-i18n_vs_intlayer.md +276 -0
  13. package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
  14. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  15. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  16. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  17. package/blog/es/intlayer_with_next-i18next.md +2 -2
  18. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  19. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  20. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  21. package/blog/fr/intlayer_with_next-i18next.md +2 -2
  22. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  23. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  24. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  25. package/blog/hi/intlayer_with_next-i18next.md +2 -2
  26. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  27. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  28. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  29. package/blog/it/intlayer_with_next-i18next.md +2 -2
  30. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  31. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  32. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  33. package/blog/ja/intlayer_with_next-i18next.md +2 -2
  34. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  35. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  36. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  37. package/blog/ko/intlayer_with_next-i18next.md +2 -2
  38. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  39. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  40. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  41. package/blog/pt/intlayer_with_next-i18next.md +2 -2
  42. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  43. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  44. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  45. package/blog/ru/intlayer_with_next-i18next.md +2 -2
  46. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  47. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  48. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  49. package/blog/zh/intlayer_with_next-i18next.md +2 -2
  50. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  51. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  52. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  53. package/dist/cjs/generated/blog.entry.cjs +41 -0
  54. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  55. package/dist/esm/generated/blog.entry.mjs +41 -0
  56. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  57. package/dist/types/generated/blog.entry.d.ts +1 -0
  58. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  59. package/docs/ar/formatters.md +417 -31
  60. package/docs/ar/how_works_intlayer.md +2 -4
  61. package/docs/ar/interest_of_intlayer.md +7 -10
  62. package/docs/ar/intlayer_CMS.md +2 -3
  63. package/docs/ar/intlayer_visual_editor.md +2 -3
  64. package/docs/ar/intlayer_with_tanstack.md +1 -1
  65. package/docs/ar/introduction.md +4 -4
  66. package/docs/de/formatters.md +444 -34
  67. package/docs/de/introduction.md +2 -2
  68. package/docs/en/dictionary/enumeration.md +2 -2
  69. package/docs/en/dictionary/function_fetching.md +2 -2
  70. package/docs/en/dictionary/get_started.md +2 -2
  71. package/docs/en/dictionary/translation.md +2 -2
  72. package/docs/en/formatters.md +383 -15
  73. package/docs/en/how_works_intlayer.md +2 -4
  74. package/docs/en/interest_of_intlayer.md +48 -29
  75. package/docs/en/intlayer_CMS.md +2 -3
  76. package/docs/en/intlayer_visual_editor.md +2 -3
  77. package/docs/en/intlayer_with_create_react_app.md +2 -2
  78. package/docs/en/intlayer_with_express.md +2 -2
  79. package/docs/en/intlayer_with_tanstack.md +1 -1
  80. package/docs/en/introduction.md +4 -4
  81. package/docs/en/packages/express-intlayer/index.md +2 -2
  82. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  83. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  84. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  85. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  86. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  87. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  88. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  89. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  90. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  91. package/docs/en/packages/intlayer/index.md +2 -2
  92. package/docs/en/packages/next-intlayer/index.md +2 -2
  93. package/docs/en/packages/next-intlayer/t.md +2 -2
  94. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  95. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  96. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  97. package/docs/en/packages/react-intlayer/index.md +2 -2
  98. package/docs/en/packages/react-intlayer/t.md +2 -2
  99. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  100. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  101. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  102. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  103. package/docs/en/packages/solid-intlayer/index.md +2 -2
  104. package/docs/en/packages/vite-intlayer/index.md +2 -2
  105. package/docs/en-GB/formatters.md +402 -16
  106. package/docs/en-GB/how_works_intlayer.md +2 -4
  107. package/docs/en-GB/interest_of_intlayer.md +7 -10
  108. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  109. package/docs/en-GB/introduction.md +2 -2
  110. package/docs/es/formatters.md +438 -28
  111. package/docs/es/how_works_intlayer.md +2 -4
  112. package/docs/es/interest_of_intlayer.md +7 -10
  113. package/docs/es/intlayer_with_tanstack.md +1 -1
  114. package/docs/es/introduction.md +2 -2
  115. package/docs/fr/formatters.md +438 -28
  116. package/docs/fr/how_works_intlayer.md +2 -4
  117. package/docs/fr/interest_of_intlayer.md +7 -10
  118. package/docs/fr/intlayer_with_tanstack.md +1 -1
  119. package/docs/fr/introduction.md +2 -2
  120. package/docs/hi/formatters.md +430 -39
  121. package/docs/hi/how_works_intlayer.md +2 -4
  122. package/docs/hi/interest_of_intlayer.md +7 -10
  123. package/docs/hi/intlayer_with_tanstack.md +1 -1
  124. package/docs/hi/introduction.md +2 -2
  125. package/docs/it/formatters.md +438 -30
  126. package/docs/it/how_works_intlayer.md +2 -4
  127. package/docs/it/interest_of_intlayer.md +7 -10
  128. package/docs/it/intlayer_with_tanstack.md +1 -1
  129. package/docs/it/introduction.md +2 -2
  130. package/docs/ja/formatters.md +435 -47
  131. package/docs/ja/how_works_intlayer.md +2 -4
  132. package/docs/ja/interest_of_intlayer.md +7 -10
  133. package/docs/ja/intlayer_with_tanstack.md +1 -1
  134. package/docs/ja/introduction.md +2 -2
  135. package/docs/ko/formatters.md +432 -41
  136. package/docs/ko/how_works_intlayer.md +2 -4
  137. package/docs/ko/interest_of_intlayer.md +7 -10
  138. package/docs/ko/intlayer_with_tanstack.md +1 -1
  139. package/docs/ko/introduction.md +2 -2
  140. package/docs/pt/formatters.md +416 -30
  141. package/docs/pt/how_works_intlayer.md +2 -4
  142. package/docs/pt/intlayer_with_tanstack.md +1 -1
  143. package/docs/pt/introduction.md +2 -2
  144. package/docs/ru/autoFill.md +2 -2
  145. package/docs/ru/configuration.md +1 -40
  146. package/docs/ru/formatters.md +438 -28
  147. package/docs/ru/how_works_intlayer.md +5 -7
  148. package/docs/ru/index.md +1 -1
  149. package/docs/ru/interest_of_intlayer.md +8 -11
  150. package/docs/ru/intlayer_CMS.md +7 -8
  151. package/docs/ru/intlayer_cli.md +4 -7
  152. package/docs/ru/intlayer_visual_editor.md +5 -6
  153. package/docs/ru/intlayer_with_angular.md +1 -1
  154. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  155. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  156. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  157. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  158. package/docs/ru/intlayer_with_nuxt.md +1 -1
  159. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  160. package/docs/ru/intlayer_with_tanstack.md +3 -3
  161. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  162. package/docs/ru/intlayer_with_vite+react.md +3 -3
  163. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  164. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  165. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  166. package/docs/ru/introduction.md +5 -5
  167. package/docs/ru/locale_mapper.md +1 -1
  168. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  169. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  170. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  171. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  172. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  173. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  174. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  175. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  176. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  177. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  178. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  179. package/docs/ru/packages/express-intlayer/index.md +3 -3
  180. package/docs/ru/packages/express-intlayer/t.md +1 -1
  181. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  182. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  183. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  184. package/docs/ru/packages/intlayer/index.md +3 -3
  185. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  186. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  187. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  188. package/docs/ru/packages/next-intlayer/index.md +4 -4
  189. package/docs/ru/packages/next-intlayer/t.md +4 -4
  190. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  191. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  192. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  193. package/docs/ru/packages/react-intlayer/index.md +4 -4
  194. package/docs/ru/packages/react-intlayer/t.md +4 -4
  195. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  196. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  197. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  198. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  199. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  200. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  201. package/docs/ru/per_locale_file.md +1 -1
  202. package/docs/ru/roadmap.md +3 -5
  203. package/docs/ru/vs_code_extension.md +1 -1
  204. package/docs/zh/formatters.md +446 -38
  205. package/docs/zh/how_works_intlayer.md +2 -4
  206. package/docs/zh/interest_of_intlayer.md +7 -10
  207. package/docs/zh/intlayer_with_tanstack.md +1 -1
  208. package/docs/zh/introduction.md +2 -2
  209. package/frequent_questions/ar/domain_routing.md +1 -1
  210. package/frequent_questions/en/domain_routing.md +1 -1
  211. package/frequent_questions/en-GB/domain_routing.md +1 -1
  212. package/frequent_questions/es/domain_routing.md +1 -1
  213. package/frequent_questions/fr/domain_routing.md +1 -1
  214. package/frequent_questions/hi/domain_routing.md +1 -1
  215. package/frequent_questions/it/domain_routing.md +1 -1
  216. package/frequent_questions/ko/domain_routing.md +1 -1
  217. package/frequent_questions/pt/domain_routing.md +1 -1
  218. package/frequent_questions/ru/domain_routing.md +1 -1
  219. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  220. package/frequent_questions/ru/static_rendering.md +1 -2
  221. package/frequent_questions/zh/domain_routing.md +1 -1
  222. package/package.json +9 -11
  223. package/src/generated/blog.entry.ts +42 -1
@@ -1,14 +1,14 @@
1
1
  ---
2
- createdAt: 2024-08-11
3
- updatedAt: 2025-06-29
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-08-23
4
4
  title: next-i18next vs next-intl vs Intlayer
5
- description: Next.jsアプリのためにnext-i18nextnext-intlIntlayerを比較する
5
+ description: Next.jsアプリの国際化(i18n)におけるnext-i18nextnext-intlIntlayerの比較
6
6
  keywords:
7
7
  - next-intl
8
8
  - next-i18next
9
9
  - Intlayer
10
10
  - 国際化
11
- - ドキュメンテーション
11
+ - ブログ
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,269 +17,146 @@ slugs:
17
17
  - next-i18next-vs-next-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # next-i18next VS next-intl VS Intlayer | Next.js 国際化 (i18n)
20
+ # next-i18next VS next-intl VS intlayer | Next.jsの国際化(i18n
21
21
 
22
- 以下に、Next.js アプリケーションの国際化 (i18n) に関する **3 つの人気ライブラリ**: **next-intl**, **next-i18next**, および **Intlayer** の簡潔な比較を示します。
22
+ 本ガイドでは、**Next.js**で広く使われている3つのi18nオプション、**next-intl**、**next-i18next**、および**Intlayer**を比較します。
23
+ 対象は**Next.js 13+のApp Router**(**React Server Components**対応)で、以下の点を評価します:
23
24
 
24
- このドキュメントでは、主要な基準を強調しています:
25
+ 1. **アーキテクチャとコンテンツの構成**
26
+ 2. **TypeScriptと安全性**
27
+ 3. **翻訳欠落の取り扱い**
28
+ 4. **ルーティングとミドルウェア**
29
+ 5. **パフォーマンスと読み込み挙動**
30
+ 6. **開発者体験(DX)、ツールとメンテナンス**
31
+ 7. **SEOと大規模プロジェクトのスケーラビリティ**
25
32
 
26
- 1. **アーキテクチャ** (翻訳をコンポーネントに近づける)
27
- 2. **TypeScript サポート**
28
- 3. **欠損翻訳の管理**
29
- 4. **サーバーコンポーネントのサポート**
30
- 5. **Next.js のための強化されたルーティングとミドルウェア**
31
- 6. **セットアップの簡易性**
32
-
33
- このガイドは、特に **Next.js 13+**、**App Router** および **Server Components** に対する強力な選択肢である理由を示す **Intlayer** の **詳細な解説** も提供します。
33
+ > **要約**: いずれのツールもNext.jsアプリのローカライズが可能です。もし**コンポーネント単位のコンテンツ管理**、**厳格なTypeScript型**、**ビルド時の欠落キー検出**、**ツリーシェイク可能な辞書**、そして**一流のApp RouterとSEOヘルパー**を求めるなら、**Intlayer**が最も包括的でモダンな選択肢です。
34
34
 
35
35
  ---
36
36
 
37
- ## 各ライブラリの概要
38
-
39
- ### 1. next-intl
37
+ ## 高レベルのポジショニング
40
38
 
41
- **主な焦点**: ローカリゼーションへの軽量アプローチで素早く簡単なセットアップ。
39
+ - **next-intl** - 軽量でシンプルなメッセージフォーマットを提供し、Next.jsとの親和性が高いです。カタログは中央集権的に管理されることが多く、開発者体験はシンプルですが、安全性や大規模なメンテナンスは主にユーザーの責任となります。
40
+ - **next-i18next** - Next.js向けにラップされたi18next。成熟したエコシステムとプラグイン(例:ICU)による機能を備えていますが、設定が冗長になりがちで、プロジェクトが大きくなるにつれてカタログは中央集権化しやすいです。
41
+ - **Intlayer** - Next.js向けのコンポーネント中心のコンテンツモデル、**厳格なTS型付け**、**ビルド時チェック**、**ツリーシェイク**、**組み込みのミドルウェアとSEOヘルパー**、オプションの**ビジュアルエディター/CMS**、および**AI支援翻訳**を提供します。
42
42
 
43
- - **アーキテクチャ**: 翻訳を単一のフォルダ (例: `locales/`) に共に配置することを推奨しますが、複数の戦略も許容します。「コンポーネントごとの翻訳」アーキテクチャを厳格に強制するわけではありません。
44
- - **TypeScript サポート**: 基本的な TypeScript 統合。一部の型定義は存在しますが、翻訳ファイルから TypeScript 定義を自動生成することに重きを置いてはいません。
45
- - **欠損翻訳**: 基本的なフォールバックメカニズム。デフォルトでは、キーまたはデフォルトのロケール文字列にフォールバックします。高度な欠損翻訳チェックのための堅牢なツールはありません。
46
- - **サーバーコンポーネントのサポート**: 一般的には Next.js 13+ で機能しますが、パターンは深いサーバーサイドの使用にはあまり特化していません (例: 複雑な動的ルーティングを伴うサーバーコンポーネント)。
47
- - **ルーティングとミドルウェア**: ミドルウェアのサポートは可能ですが限られています。通常はロケール検出のために Next.js `Middleware` に依存するか、ロケールパスを再書き込みするための手動設定が必要です。
48
- - **セットアップの簡易性**: 非常に直感的です。最小限のボイラープレートが必要です。
43
+ ---
49
44
 
50
- **使用する場合**: よりシンプルなアプローチが求められる、またはローカリゼーションをより伝統的な方法 (ロケール JSON ファイルがある一つのフォルダのように) で管理することに慣れている場合。
45
+ ## 機能の比較(Next.jsに特化)
46
+
47
+ | 機能 | `next-intlayer` (Intlayer) | `next-intl` | `next-i18next` |
48
+ | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
49
+ | **コンポーネント近くの翻訳** | ✅ はい、各コンポーネントにコンテンツが配置されています | ❌ いいえ | ❌ いいえ |
50
+ | **TypeScript統合** | ✅ 高度、厳密な型が自動生成されます | ✅ 良好 | ⚠️ 基本的 |
51
+ | **翻訳漏れ検出** | ✅ TypeScriptのエラー強調表示およびビルド時のエラー/警告 | ⚠️ 実行時フォールバック | ⚠️ 実行時フォールバック |
52
+ | **リッチコンテンツ(JSX/Markdown/コンポーネント)** | ✅ 直接サポート | ❌ リッチノード向けに設計されていません | ⚠️ 制限あり |
53
+ | **AI搭載翻訳** | ✅ はい、複数のAIプロバイダーをサポート。独自のAPIキーを使用可能。アプリケーションとコンテンツの範囲のコンテキストを考慮します。 | ❌ いいえ | ❌ いいえ |
54
+ | **ビジュアルエディター** | ✅ はい、ローカルのビジュアルエディター+オプションのCMS;コードベースのコンテンツを外部化可能;埋め込み可能 | ❌ いいえ / 外部のローカリゼーションプラットフォーム経由で利用可能 | ❌ いいえ / 外部のローカリゼーションプラットフォーム経由で利用可能 |
55
+ | **ローカライズされたルーティング** | ✅ はい、ローカライズされたパスを標準でサポート(Next.js & Viteで動作) | ✅ 組み込み、App Routerは`[locale]`セグメントをサポート | ✅ 組み込み |
56
+ | **動的ルート生成** | ✅ はい | ✅ はい | ✅ はい |
57
+ | **複数形処理** | ✅ 列挙ベースのパターン | ✅ 良好 | ✅ 良好 |
58
+ | **フォーマット(日時、数値、通貨)** | ✅ 最適化されたフォーマッター(内部でIntlを使用) | ✅ 良好(Intlヘルパー) | ✅ 良好(Intlヘルパー) |
59
+ | **コンテンツフォーマット** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml 作業中) | ✅ .json, .js, .ts | ⚠️ .json |
60
+ | **ICUサポート** | ⚠️ 作業中 | ✅ あり | ⚠️ プラグイン経由(`i18next-icu`) |
61
+ | **SEOヘルパー(hreflang、サイトマップ)** | ✅ 組み込みツール:サイトマップ、robots.txt、メタデータのヘルパー | ✅ 良好 | ✅ 良好 |
62
+ | **エコシステム / コミュニティ** | ⚠️ 小規模だが急速に成長し、反応が良い | ✅ 中規模、Next.jsに特化 | ✅ 中規模、Next.jsに特化 |
63
+ | **サーバーサイドレンダリング&サーバーコンポーネント** | ✅ はい、SSR / Reactサーバーコンポーネント向けに最適化されています | ⚠️ ページレベルでサポートされていますが、子のサーバーコンポーネントに対してt関数をコンポーネントツリーに渡す必要があります | ⚠️ ページレベルでサポートされていますが、子のサーバーコンポーネントに対してt関数をコンポーネントツリーに渡す必要があります |
64
+ | **ツリーシェイキング(使用されるコンテンツのみ読み込み)** | ✅ はい、Babel/SWCプラグインを使用してビルド時にコンポーネント単位で実施されます | ⚠️ 部分的に対応 | ⚠️ 部分的に対応 |
65
+ | **遅延読み込み** | ✅ はい、ロケールごと / 辞書ごと | ✅ はい(ルートごと / ロケールごと)、名前空間管理が必要 | ✅ はい(ルートごと / ロケールごと)、名前空間管理が必要 |
66
+ | **未使用コンテンツの削除** | ✅ はい、ビルド時に辞書ごと | ❌ いいえ、名前空間管理で手動管理可能 | ❌ いいえ、名前空間管理で手動管理可能 |
67
+ | **大規模プロジェクトの管理** | ✅ モジュール化を推奨し、デザインシステムに適している | ✅ セットアップによるモジュール化 | ✅ セットアップによるモジュール化 |
51
68
 
52
69
  ---
53
70
 
54
- ### 2. next-i18next
71
+ ## 詳細比較
55
72
 
56
- **主な焦点**: `i18next` を内部で使用した実績のあるソリューションで、Next.js プロジェクトで広く採用されています。
73
+ ### 1) アーキテクチャとスケーラビリティ
57
74
 
58
- - **アーキテクチャ**: 翻訳を `public/locales` フォルダに整理することが一般的です。特定のコンポーネントの近くに翻訳を保つようには設計されていませんが、手動で異なる構造を採用することができます。
59
- - **TypeScript サポート**: かなりの TypeScript カバレッジがあるが、型付き翻訳と型付きフックのためのカスタム設定が必要です。
60
- - **欠損翻訳**: i18next は補間/フォールバックを提供します。ただし、欠損翻訳の検出には通常追加の設定やサードパーティプラグインが必要です。
61
- - **サーバーコンポーネントのサポート**: Next.js 13 に関する基本的な使用法は文書化されていますが、高度な使用法 (例: サーバーコンポーネントとの深い統合、動的ルート生成) は手間がかかる場合があります。
62
- - **ルーティングとミドルウェア**: Next.js `Middleware` とロケールのサブパスの再書き換えに大きく依存しています。より複雑なセットアップでは、i18next の高度な構成を掘り下げる必要があるかもしれません。
63
- - **セットアップの簡易性**: i18next に慣れた人には馴染みのあるアプローチです。ただし、高度な i18n 機能が必要な場合 (ネームスペース、複数のフォールバックロケールなど)、ボイラープレートが増加する可能性があります。
75
+ - **next-intl / next-i18next**: ロケールごとの**集中型カタログ**(i18nextでは**ネームスペース**も)をデフォルトとする。初期段階では問題なく機能するが、結合度が高まりキーの変更が頻繁になるにつれて、大きな共有領域となることが多い。
76
+ - **Intlayer**: コードと共に配置された **コンポーネント単位**(または機能単位)の辞書を推奨します。これにより認知負荷が軽減され、UIパーツの複製や移行が容易になり、チーム間の競合も減少します。未使用のコンテンツも自然に見つけやすく、削除しやすくなります。
64
77
 
65
- **使用する場合**: あなたがすでに `i18next` エコシステムにコミットしているか、既存の i18next ベースの翻訳を持っている場合。
78
+ **重要な理由:** 大規模なコードベースやデザインシステムのセットアップでは、**モジュール化されたコンテンツ**の方がモノリシックなカタログよりもスケールしやすいです。
66
79
 
67
80
  ---
68
81
 
69
- ### 3. Intlayer
70
-
71
- **主な焦点**: Next.js **App Router** (12, 13, 14, 15) のために特別に設計された、サーバーコンポーネントと **Turbopack** に内蔵サポートを提供する最新のオープンソース i18n ライブラリ。
82
+ ### 2) TypeScript と安全性
72
83
 
73
- #### 主な利点
84
+ - **next-intl**: 安定した TypeScript サポートがありますが、**キーはデフォルトで厳密に型付けされていません**。安全性のパターンは手動で維持する必要があります。
85
+ - **next-i18next**: フックの基本的な型定義がありますが、**厳密なキーの型付けには追加のツールや設定が必要です**。
86
+ - **Intlayer**: コンテンツから**厳密な型を生成**します。**IDEの自動補完**や**コンパイル時のエラー**により、デプロイ前にタイプミスやキーの欠落を検出します。
74
87
 
75
- 1. **アーキテクチャ**
88
+ **なぜ重要か:** 強い型付けにより、失敗を**右(ランタイム)**ではなく**左(CI/ビルド時)**にシフトさせます。
76
89
 
77
- - **翻訳をコンポーネントのすぐ隣に配置することを推奨**します。それぞれのページまたはコンポーネントは独自の `.content.ts` (または JSON) ファイルを持つことができ、大きな翻訳フォルダを探し回る必要はありません。
78
- - これにより、大規模なコードベースでコードがより **モジュール化され、保守性が向上**します。
79
-
80
- 2. **TypeScript サポート**
81
-
82
- - **自動生成型定義**: コンテンツを定義する瞬間に、Intlayer はオートコンプリートを支え、翻訳エラーをキャッチする型を生成します。
83
- - 欠 missing Keys やランタイムエラーを最小限に抑え、IDE での **オートコンプリート** を提供します。
84
-
85
- 3. **欠損翻訳の管理**
90
+ ---
86
91
 
87
- - ビルド中、Intlayer は **欠損翻訳キーを検出**し、警告やエラーをスローすることができます。
88
- - これにより、言語全体で欠損テキストを誤って出荷することがないようにします。
92
+ ### 3) 翻訳欠落の取り扱い
89
93
 
90
- 4. **サーバーコンポーネントに最適化**
94
+ - **next-intl / next-i18next**: **ランタイムのフォールバック**に依存(例:キーやデフォルトロケールを表示)。ビルドは失敗しません。
95
+ - **Intlayer**: **ビルド時検出**により、ロケールやキーの欠落に対して**警告/エラー**を出します。
91
96
 
92
- - Next.js **App Router** と新しい **Server Components** のパラダイムと完全に互換性があります。
93
- - サーバーコンテキストを **孤立させるための特殊なプロバイダー** (`IntlayerServerProvider`, `IntlayerClientProvider`) を提供します (Next.js 13+ を扱う際に重要)。
97
+ **なぜ重要か:** ビルド時にギャップを検出することで、本番環境での「謎の文字列」発生を防ぎ、厳格なリリースゲートに適合します。
94
98
 
95
- 5. **強化されたルーティングとミドルウェア**
99
+ ---
96
100
 
97
- - 自動ロケール検出 (クッキーやブラウザヘッダーを介して) と高度なルート生成のための専用 [**`intlayerMiddleware`**](#) を含みます。
98
- - 最小限の設定でローカライズされたパス (例: `/en-US/about` と `/fr/about`) を動的に処理します。
99
- - 代替言語リンクを生成するためのヘルパー メソッド `getMultilingualUrls` を提供します (SEO に最適)。
101
+ ### 4) ルーティング、ミドルウェア、URL戦略
100
102
 
101
- 6. **簡素化されたセットアップ**
102
- - ロケール、デフォルトロケール、および統合の好みを定義するための単一の構成ファイル (`intlayer.config.ts`)。
103
- - すべての環境変数とコンテンツの監視を **注入** するラッパープラグイン `withIntlayer(nextConfig)`。
104
- - **大規模なフォールバック構成は不要**, システムは最小限の摩擦で「自動的に機能する」ように構築されています。
103
+ - 3つとも、App Router上の**Next.jsのローカライズルーティング**に対応しています。
104
+ - **Intlayer** はさらに進んで、**i18n ミドルウェア**(ヘッダーやクッキーによるロケール検出)や、ローカライズされた URL や `<link rel="alternate" hreflang="…">` タグを生成するための **ヘルパー** を提供します。
105
105
 
106
- > **結論**: Intlayer は、**React コンポーネントに近くに翻訳を保つことから**、**堅牢な TS サポート**、**容易なサーバーサイド** 使用まで、最良のプラクティスを推進したい現代的な解決策です。そして **ボイラープレートを大幅に削減**します。
106
+ **重要な理由:** カスタムの接着層が減り、**一貫した UX** **クリーンな SEO** をロケール間で実現します。
107
107
 
108
108
  ---
109
109
 
110
- ## 機能比較
111
-
112
- | **機能** | **next-intl** | **next-i18next** | **Intlayer** |
113
- | ------------------------------------ | ------------------------------------- | ------------------------------------------------ | ------------------------------------------- |
114
- | **コンポーネント近くに翻訳を保つ** | 部分的 – 通常は一つのロケールフォルダ | デフォルトではない – 多くの場合 `public/locales` | **はい – 推奨され、簡単** |
115
- | **TypeScript 自動生成** | 基本的な TS 定義 | 基本的な TS サポート | **はい – 高度なアウトオブボックス** |
116
- | **欠損翻訳の検出** | 主にフォールバック文字列 | 主にフォールバック文字列 | **はい – ビルド時チェック** |
117
- | **サーバーコンポーネントのサポート** | 機能するが専門的ではない | サポートされているが冗長になりがち | **特殊なプロバイダーと完全なサポート** |
118
- | **ルーティングとミドルウェア** | 手動で Next ミドルウェアと統合 | 再書き換え構成を介して提供 | **専用の i18n ミドルウェア + 高度なフック** |
119
- | **セットアップの複雑性** | シンプル、最小限の構成 | 従来型で、進んだ使用には冗長な場合がある | **一つの構成ファイル & プラグイン** |
120
-
121
- ---
110
+ ### 5) サーバーコンポーネント(RSC)との整合性
122
111
 
123
- ## Intlayer の利点
112
+ - **すべて**が Next.js 13+ をサポートしています。
113
+ - **Intlayer** は一貫した API と RSC 向けに設計されたプロバイダーで、**サーバー/クライアントの境界** をスムーズにし、フォーマッターや t 関数をコンポーネントツリー間で渡す必要をなくします。
124
114
 
125
- **Server Components** を持つ **Next.js App Router** (バージョン 13、14、15) に移行中または上に構築しているチームに対し、Intlayer は以下を提供します:
115
+ **重要な理由:** より明確なメンタルモデルと、ハイブリッドツリーにおけるエッジケースの減少を実現します。
126
116
 
127
- 1. **合理化されたアーキテクチャ**
117
+ ---
128
118
 
129
- - 各ルートまたはコンポーネントが自分の翻訳を保持します。これにより明確性と保守性が促進されます。
119
+ ### 6) パフォーマンスと読み込み挙動
130
120
 
131
- 2. **強力な TypeScript 統合**
121
+ - **next-intl / next-i18next**: **namespaces**や**ルートレベルの分割**による部分的な制御が可能ですが、管理が甘いと未使用の文字列がバンドルされるリスクがあります。
122
+ - **Intlayer**: ビルド時に**ツリーシェイク**を行い、辞書やロケールごとに**遅延ロード**します。未使用のコンテンツは配信されません。
132
123
 
133
- - コンパイラーレベルの安全性を得て、「タイプミス」や欠損翻訳キーを回避できます。
124
+ **なぜ重要か:** 特に多言語サイトで、バンドルサイズが小さくなり、起動が速くなります。
134
125
 
135
- 3. **リアルな欠損翻訳アラート**
126
+ ---
136
127
 
137
- - キーや言語翻訳を忘れた場合、ビルド時に警告を受け取ります(未完成の UI を出荷するのではなく)。
128
+ ### 7) DX(開発者体験)、ツール、メンテナンス
138
129
 
139
- 4. **内蔵の高度なルーティング**
130
+ - **next-intl / next-i18next**: 通常、翻訳や編集ワークフローのために外部プラットフォームと連携します。
131
+ - **Intlayer**: **無料のビジュアルエディター**と**オプションのCMS**(Git対応または外部化)を提供します。さらに、コンテンツ作成用の**VSCode拡張機能**や、独自のプロバイダーキーを使った**AI支援翻訳**も備えています。
140
132
 
141
- - 自動ロケール検出、動的ルート生成、および簡単なローカライズされた URL 管理が含まれています。
142
- - 標準の `intlayerMiddleware` は深いカスタム再書き込みを必要としません。
133
+ **なぜ重要か:** 運用コストを削減し、開発者とコンテンツ作成者間のフィードバックループを短縮します。
143
134
 
144
- 5. **ワンストップセットアップ**
135
+ ---
145
136
 
146
- - 最小限のボイラープレート: 単に `intlayer.config.ts` を定義し、`next.config` を `withIntlayer` でラップし、公式ミドルウェアを追加します。
147
- - **Server** および **Client** コンポーネントへの明確かつ直感的な使用が可能です。
137
+ ## どのツールを選ぶべきか?
148
138
 
149
- 6. **SEO フレンドリー**
150
- - 組み込まれたヘルパー (`getMultilingualUrls`, `hrefLang` 属性など) により、SEO 対応のページやサイトマップを簡単に生成できます。
139
+ - **next-intl** を選ぶのは、**最小限の**ソリューションを求めていて、集中管理されたカタログに慣れており、アプリが**小規模から中規模**の場合です。
140
+ - **next-i18next** を選ぶのは、**i18nextのプラグインエコシステム**(例:プラグインによる高度なICUルール)が必要で、チームがすでにi18nextを知っており、柔軟性のために**より多くの設定**を受け入れられる場合です。
141
+ - **Intlayer** を選ぶのは、**コンポーネント単位のコンテンツ管理**、**厳格なTypeScript**、**ビルド時の保証**、**ツリーシェイキング**、および**ルーティング/SEO/エディタツールが標準搭載**されていることを重視し、特に**Next.js App Router**や**大規模でモジュール化されたコードベース**に適している場合です。
151
142
 
152
143
  ---
153
144
 
154
- ## 例: Intlayer を使った実装
155
-
156
- 以下は、Next.js 15 プロジェクトで Intlayer を活用する方法を示す _非常に_ 短縮されたスニペットです。詳細な内容とコードの例については、[Intlayer の完全なガイドを確認してください](#)。
157
-
158
- <details>
159
- <summary>ステップバイステップの例</summary>
160
-
161
- 1. **インストールと構成**
162
-
163
- ```bash
164
- npm install intlayer next-intlayer
165
- ```
166
-
167
- ```ts
168
- // intlayer.config.ts
169
- import { Locales, type IntlayerConfig } from "intlayer";
170
-
171
- const config: IntlayerConfig = {
172
- internationalization: {
173
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
174
- defaultLocale: Locales.ENGLISH,
175
- },
176
- };
177
- export default config;
178
- ```
179
-
180
- 2. **プラグインの使用**
181
-
182
- ```ts
183
- // next.config.mjs
184
- import { withIntlayer } from "next-intlayer/server";
185
-
186
- /** @type {import('next').NextConfig} */
187
- const nextConfig = {};
188
-
189
- export default withIntlayer(nextConfig);
190
- ```
191
-
192
- 3. **ミドルウェアの追加**
193
-
194
- ```ts
195
- // src/middleware.ts
196
- export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
197
-
198
- export const config = {
199
- matcher:
200
- "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
201
- };
202
- ```
203
-
204
- 4. **ローカライズされたレイアウトの作成**
205
-
206
- ```tsx
207
- // src/app/[locale]/layout.tsx
208
- import { getHTMLTextDir } from "intlayer";
209
- import { NextLayoutIntlayer } from "next-intlayer";
210
-
211
- const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
212
- const { locale } = params;
213
- return (
214
- <html lang={locale} dir={getHTMLTextDir(locale)}>
215
- <body>{children}</body>
216
- </html>
217
- );
218
- };
219
-
220
- export { generateStaticParams } from "next-intlayer";
221
- export default LocaleLayout;
222
- ```
223
-
224
- 5. **コンテンツの宣言と使用**
225
-
226
- ```tsx
227
- // src/app/[locale]/page.content.ts
228
- import { t } from "intlayer";
229
-
230
- export default {
231
- key: "page",
232
- content: {
233
- getStarted: {
234
- main: t({
235
- en: "Get started by editing",
236
- fr: "Commencez par éditer",
237
- es: "Comience por editar",
238
- }),
239
- pageLink: "src/app/page.tsx",
240
- },
241
- },
242
- };
243
- ```
244
-
245
- ```tsx
246
- // src/app/[locale]/page.tsx
247
- import { IntlayerServerProvider } from "next-intlayer/server";
248
- import { IntlayerClientProvider, useIntlayer } from "next-intlayer";
249
-
250
- const PageContent = () => {
251
- const { content } = useIntlayer("page");
252
- return (
253
- <>
254
- <p>{content.getStarted.main}</p>
255
- <code>{content.getStarted.pageLink}</code>
256
- </>
257
- );
258
- };
259
-
260
- export default function Page({ params }) {
261
- return (
262
- <IntlayerServerProvider locale={params.locale}>
263
- <IntlayerClientProvider locale={params.locale}>
264
- <PageContent />
265
- </IntlayerClientProvider>
266
- </IntlayerServerProvider>
267
- );
268
- }
269
- ```
270
-
271
- </details>
145
+ ## 実践的な移行ノート(next-intl / next-i18next → Intlayer
146
+
147
+ - **機能ごとに開始**:ルートやコンポーネントを一度に一つずつ**ローカル辞書**に移行します。
148
+ - **旧カタログを並行して維持**:移行中の橋渡しとして使用し、一斉移行は避けます。
149
+ - **厳密なチェックを有効化**:ビルド時の検出で早期にギャップを明らかにします。
150
+ - **ミドルウェアとヘルパーを採用**:サイト全体でロケール検出とSEOタグを標準化します。
151
+ - **バンドルサイズを測定**:未使用のコンテンツが削除されるため、**バンドルサイズの削減**が期待できます。
272
152
 
273
153
  ---
274
154
 
275
155
  ## 結論
276
156
 
277
- **next-intl**, **next-i18next**, **Intlayer** の各ソリューションは、マルチリンガルな Next.js プロジェクトに対して効果的であることが証明されています。しかし、**Intlayer** はさらに前に進み:
157
+ 3つのライブラリはすべてコアなローカリゼーションに成功しています。違いは、**モダンな Next.js で堅牢でスケーラブルなセットアップを実現するためにどれだけの作業が必要か**です:
278
158
 
279
- - **コンポーネントレベルの翻訳アーキテクチャを強力に推奨**
280
- - **Next.js 13+ と Server Components にシームレスに統合**
281
- - **強力な TypeScript** 自動生成による安全なコード
282
- - **欠損翻訳をビルド時に処理**
283
- - **高度なルーティングとミドルウェアによる**単純化された、単一の構成アプローチを提供
159
+ - **Intlayer**では、**モジュラーコンテンツ**、**厳格なTS**、**ビルド時の安全性**、**ツリーシェイクされたバンドル**、そして**一流のApp Router + SEOツール**が**デフォルト**であり、手間ではありません。
160
+ - チームが多言語対応のコンポーネント駆動型アプリにおいて**保守性と速度**を重視するなら、Intlayerは今日最も**完全な**体験を提供します。
284
161
 
285
- **Next.js App Router** に特化した現代的な i18n 機能を求めていて、手動でのフォールバックロジックやルートの書き換え、複雑なビルドステップなしに **完全に型指定された** 経験を探しているなら、**Intlayer** は魅力的な選択肢です。セットアップ時間を短縮するだけでなく、チームのために翻訳のより維持可能でスケーラブルなアプローチを保証します。
162
+ 詳細は[『なぜIntlayerか?』ドキュメント](https://intlayer.org/doc/why)を参照してください。