@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
2
  createdAt: 2025-01-02
3
3
  updatedAt: 2025-06-29
4
- title: react-i18n vs react-intl vs Intlayer
5
- description: react-i18nextnext-intlIntlayerを連携する
4
+ title: react-i18next vs react-intl vs Intlayer
5
+ description: Reactアプリの国際化(i18n)のためにreact-i18nextnext-intlおよびIntlayerと統合する方法
6
6
  keywords:
7
7
  - next-intl
8
8
  - react-i18next
9
9
  - Intlayer
10
10
  - 国際化
11
- - ドキュメンテーション
11
+ - ブログ
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,178 +17,137 @@ slugs:
17
17
  - react-i18next-vs-react-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # React-Intl VS React-i18next VS Intlayer | React国際化 (i18n)
20
+ # react-Intl VS react-i18next VS intlayer | Reactの国際化(i18n
21
21
 
22
- 以下は、React用の3つの人気のあるi18n(国際化)ライブラリ**React-Intl**、**React-i18next**、および**Intlayer**の簡潔な比較です。それぞれのライブラリは、Reactアプリケーションに多言語サポートを統合するためのユニークな機能とワークフローを提供しています。この文を読んだ後で、どのソリューションがあなたのニーズに最も適しているかを決定できるようになるはずです。
22
+ 本ガイドでは、**React**向けの3つの確立されたi18nオプション、**react-intl**(FormatJS)、**react-i18next**(i18next)、および**Intlayer**を比較します。
23
+ 対象は**プレーンなReact**アプリケーション(例:Vite、CRA、SPA)です。Next.jsを使用している場合は、専用のNext.js比較をご覧ください。
23
24
 
24
- ---
25
-
26
- ## 1. はじめに
27
-
28
- Reactアプリケーションにおける国際化(i18n)は、複数の方法で実現できます。ここで紹介する3つのライブラリは、それぞれ異なる設計哲学、機能のセット、およびコミュニティサポートを持っています:
25
+ 評価項目:
29
26
 
30
- 1. **React-Intl**
31
- 2. **React-i18next**
32
- 3. **Intlayer**
27
+ - アーキテクチャとコンテンツの構成
28
+ - TypeScriptと安全性
29
+ - 翻訳漏れの処理
30
+ - リッチコンテンツとフォーマット機能
31
+ - パフォーマンスと読み込み動作
32
+ - 開発者体験(DX)、ツールおよびメンテナンス
33
+ - SEO/ルーティング(フレームワーク依存)
33
34
 
34
- 以下には、それぞれのソリューションの概要、特徴の比較、長所と短所、および使用例があります。
35
+ > **要約**:3つともReactアプリのローカライズが可能です。もし**コンポーネント単位のコンテンツ管理**、**厳格なTypeScript型**、**ビルド時の未翻訳キー検出**、**ツリーシェイク可能な辞書**、そして組み込みの編集ツール(ビジュアルエディター/CMS+オプションのAI翻訳)を求めるなら、**Intlayer**がモジュール化されたReactコードベースに最も適した選択肢です。
35
36
 
36
37
  ---
37
38
 
38
- ## 2. React-Intl
39
-
40
- ### 概要
41
-
42
- [**React-Intl**](https://formatjs.io/docs/react-intl/)は、[FormatJS](https://formatjs.io/)スイートの一部です。メッセージフォーマット、複数形、日付/時間、および数値フォーマットを扱うための強力な**APIとコンポーネント**のセットを提供します。React-Intlは、メッセージ構文とフォーマットを標準化するエコシステムの一部であるため、エンタープライズアプリケーションで広く使用されています。
43
-
44
- ### 主な機能
45
-
46
- - **ICUメッセージ構文**: メッセージの補間、複数形、その他のための包括的な構文を提供します。
47
- - **ローカライズされたフォーマット**: ロケールに基づいた日付、時間、数値、および相対時間をフォーマットするためのビルトインユーティリティ。
48
- - **宣言的コンポーネント**: JSXでのシームレスな使用のために、`<FormattedMessage>`、`<FormattedNumber>`、`<FormattedDate>`などを公開します。
49
- - **豊富なエコシステム**: メッセージの抽出、管理、コンパイルのためのFormatJSツール(例:[babel-plugin-react-intl](https://formatjs.io/docs/tooling/babel-plugin/))と良好に統合されます。
50
-
51
- ### 一般的なワークフロー
52
-
53
- 1. **メッセージカタログを定義する**(通常はロケールごとのJSONファイル)。
54
- 2. **アプリをラップする** `<IntlProvider locale="ja" messages={messages}>`の中で。
55
- 3. **使用する** `<FormattedMessage id="myMessage" defaultMessage="Hello world" />`または`useIntl()`フックを使用して翻訳文字列にアクセスする。
56
-
57
- ### 長所
58
-
59
- - 確立されており、多くの本番環境で使用されています。
60
- - 複数形、性別、タイムゾーンなどを含む高度なメッセージフォーマット。
61
- - メッセージの抽出とコンパイルに対する強力なツールサポート。
62
-
63
- ### 短所
39
+ ## ハイレベルな位置づけ
64
40
 
65
- - **ICUメッセージフォーマット**に慣れる必要があり、冗長になる可能性があります。
66
- - 文字列ベース以上の動的または複雑な翻訳の処理はあまり簡単ではありません。
41
+ - **react-intl** - ICU優先で、標準に準拠したフォーマット(日付/数値/複数形)を持つ成熟したAPI。カタログは通常集中管理され、キーの安全性やビルド時の検証は主にユーザーの責任です。
42
+ - **react-i18next** - 非常に人気があり柔軟性が高い。ネームスペース、検出器、多数のプラグイン(ICU、バックエンドなど)を備えています。強力ですが、プロジェクトの規模が大きくなると設定が複雑化することがあります。
43
+ - **Intlayer** - React向けのコンポーネント中心のコンテンツモデル、**厳格なTS型付け**、**ビルド時チェック**、**ツリーシェイク**、さらに**ビジュアルエディター/CMS**と**AI支援翻訳**を備えています。React Router、Vite、CRAなどと連携可能です。
67
44
 
68
45
  ---
69
46
 
70
- ## 3. React-i18next
47
+ ## 機能マトリックス(Reactにフォーカス)
48
+
49
+ | 機能 | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
50
+ | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
51
+ | **コンポーネント近くの翻訳** | ✅ はい、各コンポーネントにコンテンツが配置されています | ❌ いいえ | ❌ いいえ |
52
+ | **TypeScript 統合** | ✅ 高度、厳密な型が自動生成されます | ⚠️ 基本的なもの;安全性のために追加設定が必要 | ✅ 良好ですが、厳密さはやや劣ります |
53
+ | **翻訳漏れ検出** | ✅ TypeScriptのエラー強調表示およびビルド時のエラー/警告 | ⚠️ 実行時に主にフォールバック文字列を使用 | ⚠️ フォールバック文字列 |
54
+ | **リッチコンテンツ(JSX/Markdown/コンポーネント)** | ✅ 直接サポート | ⚠️ 制限あり / 補間のみ | ⚠️ ICU構文、実際のJSXではない |
55
+ | **AI搭載翻訳** | ✅ はい、複数のAIプロバイダーをサポート。自身のAPIキーを使用可能。アプリケーションのコンテキストとコンテンツの範囲を考慮します。 | ❌ いいえ | ❌ いいえ |
56
+ | **ビジュアルエディター** | ✅ はい、ローカルのビジュアルエディター+オプションのCMS;コードベースのコンテンツを外部化可能;埋め込み可能 | ❌ いいえ / 外部のローカリゼーションプラットフォームで利用可能 | ❌ いいえ / 外部のローカリゼーションプラットフォームで利用可能 |
57
+ | **ローカライズされたルーティング** | ✅ はい、ローカライズされたパスを標準でサポート(Next.js & Viteで動作) | ⚠️ 組み込みなし、プラグイン(例:`next-i18next`)やカスタムルーター設定が必要 | ❌ いいえ、メッセージフォーマットのみで、ルーティングは手動 |
58
+ | **動的ルート生成** | ✅ はい | ⚠️ プラグイン/エコシステムまたは手動設定 | ❌ 提供されていません |
59
+ | **複数形対応** | ✅ 列挙ベースのパターン | ✅ 設定可能(i18next-icuのようなプラグイン) | ✅ (ICU) |
60
+ | **フォーマット(日時、数値、通貨)** | ✅ 最適化されたフォーマッター(内部でIntlを使用) | ⚠️ プラグインまたはカスタムIntlの使用による | ✅ ICUフォーマッター |
61
+ | **コンテンツフォーマット** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml 作業中) | ⚠️ .json | ✅ .json, .js |
62
+ | **ICUサポート** | ⚠️ 作業中 | ⚠️ プラグイン経由 (i18next-icu) | ✅ はい |
63
+ | **SEOヘルパー(hreflang、サイトマップ)** | ✅ 組み込みツール:サイトマップ、robots.txt、メタデータのヘルパー | ⚠️ コミュニティプラグイン/マニュアル | ❌ コア機能ではない |
64
+ | **エコシステム/コミュニティ** | ⚠️ 小規模だが急速に成長し反応が良い | ✅ 最大かつ成熟 | ✅ 大規模 |
65
+ | **サーバーサイドレンダリング & サーバーコンポーネント** | ✅ はい、SSR / React サーバーコンポーネント向けに最適化されています | ⚠️ ページレベルでサポートされていますが、子のサーバーコンポーネントに対して t 関数をコンポーネントツリーで渡す必要があります | ❌ サポートされていません。子のサーバーコンポーネントに対して t 関数をコンポーネントツリーで渡す必要があります |
66
+ | **ツリーシェイキング(使用されるコンテンツのみ読み込み)** | ✅ はい、Babel/SWC プラグインを使ったビルド時のコンポーネント単位で実施 | ⚠️ 通常はすべて読み込みます(名前空間やコード分割で改善可能) | ⚠️ 通常はすべて読み込みます |
67
+ | **遅延読み込み** | ✅ はい、ロケールごと / 辞書ごとに対応 | ✅ はい(例:バックエンドや名前空間をオンデマンドで) | ✅ はい(ロケールバンドルを分割) |
68
+ | **未使用コンテンツの削除** | ✅ はい、ビルド時に辞書ごとに対応 | ❌ いいえ、手動で名前空間を分割する方法のみ対応 | ❌ いいえ、宣言されたすべてのメッセージがバンドルされる |
69
+ | **大規模プロジェクトの管理** | ✅ モジュール化を促進し、デザインシステムに適している | ⚠️ ファイル管理の規律が必要 | ⚠️ 中央カタログが大きくなる可能性がある |
71
70
 
72
- ### 概要
73
-
74
- [**React-i18next**](https://react.i18next.com/)は、最も人気のあるJavaScript i18nフレームワークの1つである[i18next](https://www.i18next.com/)のReact拡張です。ランタイム翻訳、レイジーローディング、および言語の検出に対する**広範な機能**を提供し、さまざまなユースケースに対して非常に柔軟です。
75
-
76
- ### 主な機能
77
-
78
- - **柔軟な翻訳構造**: ICUのような単一のフォーマットに縛られません。JSONで翻訳を格納したり、補間や複数形を使用することができます。
79
- - **動的な言語切り替え**: ビルトインの言語検出プラグインとランタイム更新。
80
- - **ネストされた構造化翻訳**: JSON内で翻訳を簡単にネストできます。
81
- - **広範なプラグインエコシステム**: 検出(ブラウザ、パス、サブドメインなど)、リソースの読み込み、キャッシュなどのためのプラグインがあります。
82
-
83
- ### 一般的なワークフロー
84
-
85
- 1. **`i18next`と`react-i18next`をインストールする。**
86
- 2. **i18nを設定して翻訳(JSON)の読み込みと、言語の検出またはフォールバックを設定します。**
87
- 3. **アプリをラップする** `I18nextProvider`の中で。
88
- 4. **`useTranslation()`フック**または`<Trans>`コンポーネントを使用して翻訳を表示します。
71
+ ---
89
72
 
90
- ### 長所
73
+ ## 詳細比較
91
74
 
92
- - 非常に**柔軟**で、機能が豊富。
93
- - 非常に活発なコミュニティと大規模なプラグインエコシステム。
94
- - 翻訳の**動的なロード**が容易(例: サーバーからの需要に応じた)。
75
+ ### 1) アーキテクチャとスケーラビリティ
95
76
 
96
- ### 短所
77
+ - **react-intl / react-i18next**: 多くのセットアップでは、言語ごとに**集中管理されたロケールフォルダ**を維持し、場合によっては**ネームスペース**(i18next)で分割しています。初期段階ではうまく機能しますが、アプリが成長するにつれて共有の作業領域となります。
78
+ - **Intlayer**: UIと共に配置された**コンポーネント単位(または機能単位)の辞書**を推奨します。これにより所有権が明確になり、コンポーネントの複製や移行が容易になり、チーム間でのキーの混乱が減少します。未使用のコンテンツも特定しやすく、削除が簡単です。
97
79
 
98
- - **設定が冗長になることがあります**、特に高度なニーズがある場合。
99
- - 強い型付けの翻訳を好む場合は、追加のTypeScriptの設定が必要になることがあります。
80
+ **重要な理由:** モジュール化されたコンテンツはモジュール化されたUIを反映します。大規模なReactコードベースでは、翻訳が所属するコンポーネントと共に存在することでコードがよりクリーンに保たれます。
100
81
 
101
82
  ---
102
83
 
103
- ## 4. Intlayer
84
+ ### 2) TypeScriptと安全性
104
85
 
105
- ### 概要
86
+ - **react-intl**: 安定した型定義がありますが、**自動的なキーの型付けはありません**。安全性のパターンは自分で強制する必要があります。
87
+ - **react-i18next**: フックに対する強力な型定義がありますが、**厳密なキーの型付け**には通常、追加の設定やジェネレーターが必要です。
88
+ - **Intlayer**: コンテンツから**厳密な型を自動生成**します。IDEのオートコンプリートや**コンパイル時エラー**により、実行前にタイプミスやキーの欠落を検出します。
106
89
 
107
- [**Intlayer**](https://github.com/aymericzip/intlayer)は、典型的なJSONカタログからシフトして、**コンポーネントごとのコンテンツ宣言**、型安全性、および**動的ルーティング**に焦点を当てた新しいオープンソースのi18nライブラリです。これは、現代的なReactワークフロー向けに設計されており、**Create React App**と**Vite**の両方のセットアップをサポートしています。また、**ロケールベースのルーティング**や**自動生成されたTypeScript型**などの高度な機能も含まれています。
90
+ **なぜ重要か:** 失敗を**左側(ビルド/CI段階)に移す**ことで、本番環境の問題を減らし、開発者のフィードバックループを高速化します。
108
91
 
109
- ### 主な機能
92
+ ---
110
93
 
111
- - **宣言的コンテンツファイル**: 各コンポーネントまたはモジュールは、専用の`.content.tsx`または`.content.json`ファイルにその翻訳を宣言できます。また、使用されている場所にコンテンツを近づけます。
112
- - **ビルトインのルーティング&ミドルウェア**: ローカライズされたルーティングのためのオプションモジュール(例:`/ja/about`, `/fr/about`)およびユーザーのロケールを検出するためのサーバーミドルウェア。
113
- - **自動生成されたTypeScript型**: 自動補完やコンパイル時のエラー検出などの機能を持つ型安全性を確保します。
114
- - **動的でリッチな翻訳**: より複雑なユースケース(例: リンク、太字のテキスト、翻訳内のアイコン)に対してJSX/TSXを翻訳に含めることができます。
94
+ ### 3) 翻訳欠落の取り扱い
115
95
 
116
- ### 一般的なワークフロー
96
+ - **react-intl / react-i18next**: デフォルトは**実行時のフォールバック**(キーのエコーやデフォルトロケール)。リンティングやプラグインを追加可能ですが、ビルド時の保証はありません。
97
+ - **Intlayer**: 必須のロケールやキーが欠落している場合、**ビルド時に検出**し、警告またはエラーを出します。
117
98
 
118
- 1. **`intlayer`と`react-intlayer`をインストールする。**
119
- 2. **`intlayer.config.ts`を作成し、使用可能なロケールおよびデフォルトロケールを定義する。**
120
- 3. **Intlayer CLI**またはプラグインを使用して**コンテンツ宣言をトランスパイル**する。
121
- 4. **アプリをラップする** `<IntlayerProvider>`の中で、`useIntlayer("keyName")`でコンテンツを取得します。
99
+ **なぜ重要か:** CIで欠落文字列を検出し失敗させることで、非英語UIに「謎の英語」が混入するのを防ぎます。
122
100
 
123
- ### 長所
101
+ ---
124
102
 
125
- - **TypeScriptフレンドリー**で、型生成とエラーチェックが組み込まれています。
126
- - **リッチなコンテンツ**が可能(例: 翻訳としてReactノードを渡すこと)。
127
- - **ローカライズされたルーティング**が即座に使用可能。
128
- - 人気のビルドツール(CRA, Vite)と統合されており、簡単な設定が可能です。
103
+ ### 4) リッチコンテンツとフォーマット
129
104
 
130
- ### 短所
105
+ - **react-intl**: 複数形、選択、日付/数値、メッセージ構成に対する優れた **ICU** サポート。JSX を使用可能ですが、メンタルモデルはメッセージ中心のままです。
106
+ - **react-i18next**: 柔軟な補間と要素/コンポーネントを埋め込むための **`<Trans>`** コンポーネント;ICU はプラグイン経由で利用可能です。
107
+ - **Intlayer**: コンテンツファイルは **リッチノード**(JSX/Markdown/コンポーネント)や **メタデータ** を含めることができます。フォーマットは内部的に Intl を使用し、複数形パターンは使いやすく設計されています。
131
108
 
132
- - まだ**比較的新しい**ライブラリであるため、React-IntlやReact-i18nextに比べて。
133
- - 「コンポーネントレベルのコンテンツ宣言」アプローチに多く依存 , 従来の.jsonカタログからのシフトかもしれません。
134
- - より確立されたライブラリに比べて、エコシステムやコミュニティが小さめです。
109
+ **重要な理由:** 複雑なUIテキスト(リンク、太字部分、インラインコンポーネント)が、ライブラリがReactノードをきれいに扱うことでより簡単になります。
135
110
 
136
111
  ---
137
112
 
138
- ## 5. 機能比較
113
+ ### 5) パフォーマンスと読み込み動作
114
+
115
+ - **react-intl / react-i18next**: 通常、**カタログの分割**や**遅延読み込み**は手動で管理します(名前空間や動的インポート)。効果的ですが、規律が必要です。
116
+ - **Intlayer**: 未使用の辞書を**ツリーシェイク**し、**辞書単位・ロケール単位の遅延読み込み**を標準でサポートします。
139
117
 
140
- | **機能** | **React-Intl** | **React-i18next** | **Intlayer** |
141
- | ---------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
142
- | **主なユースケース** | 文字列ベースの翻訳、日付/数値フォーマット、ICUメッセージ構文 | 簡単な動的切り替え、ネスティング、プラグインエコシステムを持つフル機能のi18n | 宣言的コンテンツ、ローカライズされたルーティング、およびオプションのサーバーミドルウェアの型安全な翻訳 |
143
- | **アプローチ** | `<IntlProvider>`とFormatJSメッセージコンポーネントを利用 | `I18nextProvider`と`useTranslation()`フックを利用 | `<IntlayerProvider>`と`useIntlayer()`フックを利用したコンテンツ宣言 |
144
- | **ローカリゼーションフォーマット** | ICUベースの文字列(JSONまたはJavaScriptカタログ) | JSONリソースファイル(またはカスタムローダー)。ICU形式はi18nextプラグインを通じてオプション | `.content.[ts/js/tsx]`またはJSON宣言; 文字列やReactコンポーネントを含むことができる |
145
- | **ルーティング** | 外部で処理(ローカライズされたルーティングの組み込みなし) | i18nextプラグインを介した外部での処理(パス、サブドメインの検出など) | ビルトインのローカライズされたルーティングサポート(例:`/ja/about`, `/fr/about`)、およびオプションのサーバーミドルウェア(SSR/Vite用) |
146
- | **TypeScriptサポート** | 良好(公式パッケージの型) | 良好だが、厳密なチェックを希望する場合、型翻訳のための追加設定が必要 | 優れている(コンテンツキーと翻訳のための自動生成された型定義) |
147
- | **複数形とフォーマット** | 高度: 日付/時間/数値フォーマット、複数形/性別サポートが組み込まれている | 構成可能な複数形。日付/時間のフォーマットは通常、外部ライブラリやi18nextプラグインで実行される | 標準のJavaScriptIntlに依存することができますが、コンテンツにロジックを埋め込むこともできます。FormatJSほど専門的ではありませんが、一般的なケースを処理します。 |
148
- | **コミュニティとエコシステム** | 大規模で、FormatJSエコシステムの一部 | 非常に大規模で、非常に活発で、たくさんのプラグイン(検出、キャッシング、フレームワーク用) | 小規模ですが成長中; オープンソースで、現代的なアプローチ |
149
- | **学習曲線** | 中程度(ICUメッセージ構文とFormatJSの規則を学ぶ) | 低から中程度(使いやすいが、高度な設定は冗長になることも) | 中程度(コンテンツ宣言と専門的なビルド手順の概念) |
118
+ **なぜ重要か:** バンドルサイズが小さくなり、未使用の文字列が減ることで、起動時間やナビゲーションのパフォーマンスが向上します。
150
119
 
151
120
  ---
152
121
 
153
- ## 6. それぞれを選ぶ際の考慮事項
122
+ ### 6) DX、ツール&メンテナンス
154
123
 
155
- 1. **React-Intl**
124
+ - **react-intl / react-i18next**: 幅広いコミュニティエコシステムがあり、編集ワークフローには通常、外部のローカリゼーションプラットフォームを採用します。
125
+ - **Intlayer**: 無料の**ビジュアルエディター**と**オプションのCMS**(コンテンツをGitに保持するか外部化するか選択可能)を提供します。また、コンテンツ作成用の**VSCode拡張機能**や、独自のプロバイダーキーを使った**AI支援翻訳**も利用可能です。
156
126
 
157
- - **強力なフォーマット**が必要な場合、日付/時間/数値、および強力な**ICUメッセージ構文**。
158
- - 翻訳に対して「**標準ベース**」のアプローチを好む場合。
159
- - ローカライズされたルーティングや強い型付けの翻訳キーは必要ない。
127
+ **重要な理由:** 組み込みのツールにより、開発者とコンテンツ作成者間のやり取りが短縮され、接着コードが減り、ベンダー依存も少なくなります。
160
128
 
161
- 2. **React-i18next**
129
+ ---
162
130
 
163
- - **柔軟で確立された**解決策が必要で、**動的**で**オンデマンド**の翻訳の読み込みが必要な場合。
164
- - 「URL、クッキー、ローカルストレージ」などからのプラグインベースの言語検出や、高度なキャッシュが必要な場合。
165
- - 最も大規模なエコシステムが必要で、さまざまなフレームワーク(Next.js、React Nativeなど)向けの多くの既存統合が必要な場合。
131
+ ## どれを選ぶべきか?
166
132
 
167
- 3. **Intlayer**
168
- - **強いTypeScript**統合が欲しい場合、*自動生成された型*があり、ほとんど翻訳キーを見逃しません。
169
- - **宣言的コンテンツ**をコンポーネントの近くに配置することを好み、Reactノードや翻訳における高度なロジックを含めたい場合。
170
- - **組み込みのローカライズされたルーティング**が必要で、SSRやViteの設定に簡単に組み込むことができる場合。
171
- - 現代的なアプローチを求めるか、単一のライブラリで**コンテンツ管理**(i18n)と**ルーティング**を型安全な方法でカバーしたい場合。
133
+ - **react-intlを選ぶ**場合は、シンプルで標準に準拠したAPIを持つ**ICU優先**のメッセージフォーマットを求め、チームがカタログや安全チェックを手動で管理することに慣れている場合です。
134
+ - **react-i18nextを選ぶ**場合は、**i18nextのエコシステムの幅広さ**(検出器、バックエンド、ICUプラグイン、統合など)が必要で、柔軟性を得るためにより多くの設定を受け入れられる場合です。
135
+ - **Intlayerを選ぶべき場合**:**コンポーネント単位のコンテンツ管理**、**厳格なTypeScript**、**ビルド時の保証**、**ツリーシェイキング**、そして**充実した編集ツール**を重視する場合、特に**大規模でモジュール化された**Reactアプリに最適です。
172
136
 
173
137
  ---
174
138
 
175
- ## 7. 結論
176
-
177
- 各ライブラリは、Reactアプリケーションの国際化に対して堅牢なソリューションを提供します:
178
-
179
- - **React-Intl**はメッセージフォーマットに優れ、ICUメッセージ構文に重点を置いたエンタープライズソリューションに人気です。
180
- - **React-i18next**は、高度に柔軟でプラグイン駆動の環境を提供し、動的または高度なi18nニーズに対応します。
181
- - **Intlayer**は、コンテンツ宣言、進化したローカライズされたルーティング、およびプラグインベース(CRA、Vite)の統合を融合させた**現代的で型安全な**アプローチを提供します。
139
+ ## 実践的な移行ノート(react-intl / react-i18next → Intlayer)
182
140
 
183
- あなたの選択は、プロジェクトの要件、望ましい開発者体験(DX)、および型付け翻訳や高度なルーティングの重要性によって大きく異なります。組み込みのローカライズされたルーティングとTypeScriptの統合を重視する場合は、**Intlayer**が最も魅力的かもしれません。戦闘実績があり、エコシステムが豊富なソリューションを求める場合は、**React-i18next**が素晴らしい選択肢です。単純なICUベースのフォーマットが必要な場合は、**React-Intl**が信頼できる選択肢です。
141
+ - **段階的に移行する**:まずは一つの機能やルートから始め、移行期間中は旧カタログを並行して維持します。
142
+ - **コンポーネントごとの辞書を採用する**:コンテンツをコンポーネントと共に配置し、結合度を下げます。
143
+ - **厳格なチェックを有効にする**:ビルド時のエラーで欠落したキーやロケールをCIの早い段階で検出します。
144
+ - **バンドルサイズを測定する**:未使用の文字列が削除されることでサイズ削減が期待できます。
184
145
 
185
146
  ---
186
147
 
187
- ### さらなる読み物
148
+ ## 結論
188
149
 
189
- - [React-Intl ドキュメント](https://formatjs.io/docs/react-intl/)
190
- - [React-i18next ドキュメント](https://react.i18next.com/)
191
- - [Intlayer + CRA のスタートガイド](/#)(あなたのドキュメントから)
192
- - [Intlayer + Vite & React のスタートガイド](/#)(あなたのドキュメントから)
150
+ 3つのライブラリはすべてReactのローカライズを効果的に行います。差別化のポイントは、安全でスケーラブルなセットアップを実現するためにどれだけの**インフラストラクチャ**を構築する必要があるかです。
193
151
 
194
- 要件に応じてアプローチを自由に組み合わせてください。「一律すべてに合う」ソリューションはなく、それぞれのライブラリは新しいユースケースに対応するために進化を続けています。
152
+ - **Intlayer**では、**モジュラーコンテンツ**、**厳格なTS型付け**、**ビルド時の安全性**、**ツリーシェイクされたバンドル**、そして**編集ツール**がデフォルトであり、手間ではありません。
153
+ - チームが多言語対応でコンポーネント駆動のReactアプリにおいて、**保守性と速度**を重視するなら、Intlayerは今日最も**完全な**開発者およびコンテンツワークフローを提供します。
@@ -0,0 +1,268 @@
1
+ ---
2
+ createdAt: 2024-08-11
3
+ updatedAt: 2025-08-23
4
+ title: vue-i18n vs Intlayer
5
+ description: Vue/Nuxtアプリにおける国際化(i18n)について、vue-i18nとIntlayerを比較
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - 国際化
10
+ - i18n
11
+ - ブログ
12
+ - Vue
13
+ - Nuxt
14
+ - JavaScript
15
+ slugs:
16
+ - blog
17
+ - vue-i18n-vs-intlayer
18
+ ---
19
+
20
+ # vue-i18n VS Intlayer | Vueの国際化(i18n)
21
+
22
+ 本ガイドでは、**Vue 3**(および**Nuxt**)向けの人気i18nオプションである**vue-i18n**と**Intlayer**を比較します。
23
+ モダンなVueツール(Vite、Composition API)に焦点を当て、以下を評価します:
24
+
25
+ 1. **アーキテクチャとコンテンツの構成**
26
+ 2. **TypeScriptと安全性**
27
+ 3. **翻訳漏れの取り扱い**
28
+ 4. **ルーティングとURL戦略**
29
+ 5. **パフォーマンスと読み込み挙動**
30
+ 6. **開発者体験(DX)、ツールとメンテナンス**
31
+ 7. **SEOと大規模プロジェクトのスケーラビリティ**
32
+
33
+ > **要約**:どちらもVueアプリのローカライズが可能です。もし**コンポーネント単位のコンテンツ管理**、**厳格なTypeScript型**、**ビルド時の未翻訳キー検出**、**ツリーシェイク可能な辞書**、そして**ルーターやSEOヘルパーが標準装備**されていて、さらに**ビジュアルエディターとAI翻訳**も欲しいなら、**Intlayer**がより完全でモダンな選択肢です。
34
+
35
+ ---
36
+
37
+ ## 高レベルのポジショニング
38
+
39
+ - **vue-i18n** - Vueの事実上の標準i18nライブラリ。柔軟なメッセージフォーマット(ICUスタイル)、ローカルメッセージ用のSFC `<i18n>` ブロック、大規模なエコシステムを持ちます。安全性や大規模メンテナンスは主にユーザーの責任です。
40
+ - **Intlayer** - Vue/Vite/Nuxt向けのコンポーネント中心のコンテンツモデルで、**厳格なTS型付け**、**ビルド時チェック**、**ツリーシェイキング**、**ルーター&SEOヘルパー**、オプションの**ビジュアルエディター/CMS**、および**AI支援翻訳**を備えています。
41
+
42
+ ---
43
+
44
+ ## 機能の比較(Vueに特化)
45
+
46
+ | 機能 | **Intlayer** | **vue-i18n** |
47
+ | -------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
48
+ | **コンポーネント近くの翻訳** | ✅ はい、コンポーネントごとにコンテンツが共置(例:`MyComp.content.ts`) | ✅ はい、SFCの`<i18n>`ブロック経由(オプション) |
49
+ | **TypeScript統合** | ✅ 高度で自動生成された**厳密な**型とキーのオートコンプリート | ✅ 良好な型定義;**厳密なキー安全性は追加の設定/規律が必要** |
50
+ | **翻訳漏れ検出** | ✅ **ビルド時**の警告/エラーとTSへの反映 | ⚠️ 実行時のフォールバック/警告 |
51
+ | **リッチコンテンツ(コンポーネント/Markdown)** | ✅ リッチノードおよびMarkdownコンテンツファイルの直接サポート | ⚠️ 制限あり(コンポーネントは`<i18n-t>`経由、Markdownは外部プラグイン経由) |
52
+ | **AIによる翻訳** | ✅ 独自のAIプロバイダーキーを使用した組み込みワークフロー | ❌ 組み込みなし |
53
+ | **ビジュアルエディター / CMS** | ✅ 無料のビジュアルエディターおよびオプションのCMS | ❌ 組み込みなし(外部プラットフォームを使用) |
54
+ | **ローカライズされたルーティング** | ✅ Vue Router/Nuxt用のローカライズされたパス、URL、および`hreflang`を生成するヘルパー | ⚠️ コア機能ではない(Nuxt i18nまたはカスタムVue Router設定を使用) |
55
+ | **動的ルート生成** | ✅ あり | ❌ 提供されていない(Nuxt i18nが提供) |
56
+ | **複数形とフォーマット** | ✅ 列挙パターン;Intlベースのフォーマッター | ✅ ICUスタイルのメッセージ;Intlフォーマッター |
57
+ | **コンテンツ形式** | ✅ `.ts`、`.js`、`.json`、`.md`、`.txt`(YAML 作業中) | ✅ `.json`、`.js`(および SFC の `<i18n>` ブロック) |
58
+ | **ICU サポート** | ⚠️ 作業中 | ✅ 対応 |
59
+ | **SEO ヘルパー(サイトマップ、robots、メタデータ)** | ✅ 組み込みヘルパー(フレームワーク非依存) | ❌ コア機能ではない(Nuxt i18n / コミュニティ) |
60
+ | **SSR/SSG** | ✅ Vue SSRおよびNuxtで動作;静的レンダリングをブロックしない | ✅ Vue SSR/Nuxtで動作 |
61
+ | **ツリーシェイキング(使用されるコンテンツのみを出荷)** | ✅ ビルド時にコンポーネント単位で実施 | ⚠️ 部分的;手動でのコード分割や非同期メッセージが必要 |
62
+ | **遅延読み込み** | ✅ ロケール単位/辞書単位で対応 | ✅ 非同期ロケールメッセージをサポート |
63
+ | **未使用コンテンツの削除** | ✅ はい(ビルド時) | ❌ 組み込みではない |
64
+ | **大規模プロジェクトの保守性** | ✅ モジュール化されたデザインシステムに適した構造を推奨 | ✅ 可能だが、強力なファイル/名前空間の規律が必要 |
65
+ | **エコシステム / コミュニティ** | ⚠️ 小規模だが急速に成長中 | ✅ Vueエコシステム内で大規模かつ成熟している |
66
+
67
+ ---
68
+
69
+ ## 詳細比較
70
+
71
+ ### 1) アーキテクチャとスケーラビリティ
72
+
73
+ - **vue-i18n**: 一般的な設定では、ロケールごとに**集中管理されたカタログ**を使用します(ファイルや名前空間に分割することも可能)。SFCの`<i18n>`ブロックはローカルメッセージを許可しますが、プロジェクトが大きくなるとチームはしばしば共有カタログに戻ります。
74
+ - **Intlayer**: コンポーネントごとに辞書を持ち、そのコンポーネントの隣に保存することを推奨します。これによりチーム間の競合が減り、コンテンツの発見性が保たれ、自然にキーのズレや未使用を制限できます。
75
+
76
+ **重要な理由:** 大規模なVueアプリやデザインシステムでは、**モジュール化されたコンテンツ**の方がモノリシックなカタログよりもスケールしやすいです。
77
+
78
+ ---
79
+
80
+ ### 2) TypeScript と安全性
81
+
82
+ - **vue-i18n**: TSサポートは良好ですが、**厳密なキー型付け**には通常カスタムスキーマやジェネリクス、慎重な規約が必要です。
83
+ - **Intlayer**: コンテンツから**厳密な型定義を生成**し、**IDEのオートコンプリート**やタイプミス・キーの欠落に対する**コンパイル時エラー**を提供します。
84
+
85
+ **重要な理由:** 強力な型付けにより、実行時**前に問題を検出**できます。
86
+
87
+ ---
88
+
89
+ ### 3) 翻訳欠落の処理
90
+
91
+ - **vue-i18n**: **実行時**の警告やフォールバック(例:フォールバックロケールやキー)。
92
+ - **Intlayer**: **ビルド時**にロケールやキー全体で警告やエラーを検出します。
93
+
94
+ **重要な理由:** ビルド時の検証により、本番環境のUIをクリーンかつ一貫性のある状態に保てます。
95
+
96
+ ---
97
+
98
+ ### 4) ルーティングとURL戦略(Vue Router/Nuxt)
99
+
100
+ - **両者**ともローカライズされたルートに対応可能です。
101
+ - **Intlayer** は、**ローカライズされたパスの生成**、**ロケールプレフィックスの管理**、および SEO のための **`<link rel="alternate" hreflang>` の発行**を支援するヘルパーを提供します。Nuxt では、フレームワークのルーティングを補完します。
102
+
103
+ **重要な理由:** カスタムの接着層が減り、ロケール間での **よりクリーンな SEO** を実現します。
104
+
105
+ ---
106
+
107
+ ### 5) パフォーマンスと読み込み動作
108
+
109
+ - **vue-i18n**: 非同期ロケールメッセージをサポートしますが、過剰なバンドルを避けるのはユーザー次第です(カタログを慎重に分割してください)。
110
+ - **Intlayer**: ビルド時に **ツリーシェイク** を行い、**辞書/ロケールごとに遅延読み込み** を行います。未使用のコンテンツは配信されません。
111
+
112
+ **重要な理由:** マルチロケールの Vue アプリで、より小さなバンドルサイズと高速な起動を実現します。
113
+
114
+ ---
115
+
116
+ ### 6) 開発者体験とツール
117
+
118
+ - **vue-i18n**: 成熟したドキュメントとコミュニティを持ち、編集ワークフローには通常、**外部のローカリゼーションプラットフォーム**に依存します。
119
+ - **Intlayer**: **無料のビジュアルエディター**、オプションの**CMS**(Gitフレンドリーまたは外部化可能)、**VSCode拡張機能**、**CLI/CIユーティリティ**、および独自のプロバイダーキーを使用した**AI支援翻訳**を提供します。
120
+
121
+ **重要な理由:** 運用コストの削減と開発–コンテンツのループ短縮。
122
+
123
+ ---
124
+
125
+ ### 7) SEO、SSR & SSG
126
+
127
+ - **両者**ともにVue SSRおよびNuxtと連携します。
128
+ - **Intlayer**: フレームワークに依存しない**SEOヘルパー**(サイトマップ/メタデータ/`hreflang`)を追加し、Vue/Nuxtのビルドとスムーズに連携します。
129
+
130
+ **重要な理由:** カスタム配線なしでの国際SEO。
131
+
132
+ ---
133
+
134
+ ## なぜIntlayerなのか?(問題とアプローチ)
135
+
136
+ ほとんどのi18nスタック(**vue-i18n**を含む)は、**集中型カタログ**から始まります:
137
+
138
+ ```bash
139
+ .
140
+ ├── locales
141
+ │ ├── en.json
142
+ │ ├── es.json
143
+ │ └── fr.json
144
+ └── src
145
+ └── components
146
+ └── MyComponent.vue
147
+ ```
148
+
149
+ またはロケールごとのフォルダ構成:
150
+
151
+ ```bash
152
+ .
153
+ ├── locales
154
+ │ ├── en
155
+ │ │ ├── footer.json
156
+ │ │ └── navbar.json
157
+ │ ├── fr
158
+ │ │ ├── footer.json
159
+ │ │ └── navbar.json
160
+ │ └── es
161
+ │ ├── footer.json
162
+ │ └── navbar.json
163
+ └── src
164
+ └── components
165
+ └── MyComponent.vue
166
+ ```
167
+
168
+ アプリが成長するにつれて、これが開発の遅延を招くことがよくあります:
169
+
170
+ 1. **新しいコンポーネントの場合**、リモートカタログを作成/編集し、名前空間を設定し、翻訳を行います(多くの場合、AIツールからの手動コピー&ペーストによる)。
171
+ 2. **コンポーネントを変更する場合**、共有キーを探し出し、翻訳し、ロケールを同期させ、不要なキーを削除し、JSON構造を整合させます。
172
+
173
+ **Intlayer**はコンテンツを**コンポーネント単位**でスコープし、CSS、ストーリー、テスト、ドキュメントと同様に**コードの隣に保持**します。
174
+
175
+ ```bash
176
+ .
177
+ └── components
178
+ └── MyComponent
179
+ ├── MyComponent.content.ts
180
+ └── MyComponent.vue
181
+ ```
182
+
183
+ **コンテンツ宣言**(コンポーネント単位):
184
+
185
+ ```ts fileName="./components/MyComponent/MyComponent.content.ts"
186
+ import { t, type Dictionary } from "intlayer";
187
+
188
+ const componentExampleContent = {
189
+ key: "component-example",
190
+ content: {
191
+ greeting: t({
192
+ en: "Hello World",
193
+ es: "Hola Mundo",
194
+ fr: "Bonjour le monde",
195
+ }),
196
+ },
197
+ } satisfies Dictionary;
198
+
199
+ export default componentExampleContent;
200
+ ```
201
+
202
+ **Vueでの使用例**(Composition API):
203
+
204
+ ```vue fileName="./components/MyComponent/MyComponent.vue"
205
+ <script setup lang="ts">
206
+ import { useIntlayer } from "vue-intlayer"; // Vue統合
207
+ const { greeting } = useIntlayer("component-example");
208
+ </script>
209
+
210
+ <template>
211
+ <span>{{ greeting }}</span>
212
+ </template>
213
+ ```
214
+
215
+ このアプローチは以下の利点があります:
216
+
217
+ - **開発を高速化**(一度宣言すれば、IDEやAIが自動補完)。
218
+ - **コードベースをクリーンに保つ**(1コンポーネント = 1辞書)。
219
+ - **複製や移行を容易に**(コンポーネントとそのコンテンツを一緒にコピー)。
220
+ - **不要なキーを回避**(未使用のコンポーネントはコンテンツをインポートしない)。
221
+ - **読み込みを最適化**(遅延読み込みされるコンポーネントは自身のコンテンツを持つ)。
222
+
223
+ ---
224
+
225
+ ## Intlayerの追加機能(Vue関連)
226
+
227
+ - **クロスフレームワーク対応**:Vue、Nuxt、Vite、React、Expressなどで動作。
228
+ - **JavaScript駆動のコンテンツ管理**:コード内で柔軟に宣言可能。
229
+ - **ロケールごとの宣言ファイル**: すべてのロケールをシードし、ツールが残りを生成します。
230
+ - **型安全な環境**: 強力なTS設定とオートコンプリート機能。
231
+ - **簡素化されたコンテンツ取得**: 辞書のすべてのコンテンツを取得する単一のフック/コンポーザブル。
232
+ - **整理されたコードベース**: 1コンポーネント = 同じフォルダ内の1辞書。
233
+ - **強化されたルーティング**: **Vue Router/Nuxt** のローカライズされたパスとメタデータのためのヘルパー。
234
+ - **Markdownサポート**: ロケールごとにリモート/ローカルMarkdownをインポートし、フロントマターをコードに公開。
235
+ - **無料のビジュアルエディター&オプションのCMS**: 有料のローカリゼーションプラットフォームなしでの作成が可能。Gitに優しい同期。
236
+ - **ツリーシェイカブルなコンテンツ**: 使用されるものだけを出荷。遅延読み込みをサポート。
237
+ - **静的レンダリングに優しい**: SSGをブロックしません。
238
+ - **AI搭載の翻訳**: ご自身のAIプロバイダー/APIキーを使用して231言語に翻訳可能。
239
+ - **MCPサーバー&VSCode拡張機能**: IDE内でのi18nワークフローとオーサリングを自動化。
240
+ - **相互運用性**: 必要に応じて**vue-i18n**、**react-i18next**、**react-intl**と連携。
241
+
242
+ ---
243
+
244
+ ## どちらを選ぶべきか?
245
+
246
+ - **vue-i18nを選ぶ場合**: 標準的なVueのアプローチを望み、カタログや名前空間の管理に慣れていて、アプリが**小規模から中規模**(またはすでにNuxt i18nを利用している)場合。
247
+ - **Intlayerを選ぶ場合**: **コンポーネントスコープのコンテンツ**、**厳密なTypeScript**、**ビルド時の保証**、**ツリーシェイキング**、および**ルーティング/SEO/エディターツールが一式揃っていること**を重視し、特に**大規模でモジュール化されたVue/Nuxtコードベース**に適している場合。
248
+
249
+ ---
250
+
251
+ ## 実践的な移行ノート(vue-i18n → Intlayer)
252
+
253
+ - **機能単位で開始**:ルート/ビュー/コンポーネントを一つずつローカルの Intlayer 辞書に移行します。
254
+ - **移行中のブリッジ**:vue-i18n のカタログを並行して保持し、段階的にルックアップを置き換えます。
255
+ - **厳密なチェックを有効化**:ビルド時に欠落しているキーやロケールを早期に検出できるようにします。
256
+ - **ルーター/SEO ヘルパーを採用**:ロケール検出と `hreflang` タグを標準化します。
257
+ - **バンドルサイズを測定**:未使用のコンテンツが除外されることで、**バンドルサイズの削減**が期待できます。
258
+
259
+ ---
260
+
261
+ ## 結論
262
+
263
+ **vue-i18n** と **Intlayer** はどちらも Vue アプリのローカライズに優れています。違いは、堅牢でスケーラブルなセットアップを実現するために、**どれだけ自分で構築する必要があるか**にあります:
264
+
265
+ - **Intlayer**では、**モジュール化されたコンテンツ**、**厳格なTypeScript**、**ビルド時の安全性**、**ツリーシェイクされたバンドル**、および**ルーター/SEO/エディター用ツール**が**標準で提供**されます。
266
+ - チームがマルチロケール対応のコンポーネント駆動型Vue/Nuxtアプリにおいて、**保守性と速度**を重視する場合、Intlayerは現時点で**最も充実した**体験を提供します。
267
+
268
+ 詳細は['Why Intlayer?' ドキュメント](https://intlayer.org/doc/why)をご参照ください。
@@ -1,6 +1,6 @@
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: Intlayer와 next-i18next
5
5
  description: Next.js 앱을 위해 next-i18next와 Intlayer를 통합하다
6
6
  keywords: