@intlayer/docs 5.5.11 → 5.5.12
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.
- package/blog/ar/intlayer_with_next-intl.md +0 -1
- package/blog/ar/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ar/what_is_internationalization.md +2 -2
- package/blog/de/intlayer_with_next-intl.md +0 -1
- package/blog/de/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/de/what_is_internationalization.md +2 -2
- package/blog/en/intlayer_with_next-intl.md +0 -1
- package/blog/en/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en/what_is_internationalization.md +2 -2
- package/blog/en-GB/intlayer_with_next-intl.md +0 -1
- package/blog/en-GB/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en-GB/what_is_internationalization.md +2 -2
- package/blog/es/intlayer_with_next-intl.md +0 -1
- package/blog/es/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/es/what_is_internationalization.md +2 -2
- package/blog/fr/intlayer_with_next-intl.md +0 -1
- package/blog/fr/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/fr/what_is_internationalization.md +2 -2
- package/blog/hi/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/hi/what_is_internationalization.md +2 -2
- package/blog/it/intlayer_with_next-intl.md +0 -1
- package/blog/it/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/it/what_is_internationalization.md +2 -2
- package/blog/ja/intlayer_with_next-intl.md +0 -1
- package/blog/ja/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ja/what_is_internationalization.md +2 -2
- package/blog/ko/intlayer_with_next-intl.md +0 -1
- package/blog/ko/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/intlayer_with_next-intl.md +0 -1
- package/blog/pt/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/what_is_internationalization.md +2 -2
- package/blog/ru/intlayer_with_next-intl.md +0 -1
- package/blog/ru/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ru/what_is_internationalization.md +2 -2
- package/blog/zh/intlayer_with_next-intl.md +0 -1
- package/blog/zh/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/zh/what_is_internationalization.md +2 -2
- package/dist/cjs/blog.cjs +2 -2
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +17 -6
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs +2 -2
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +2 -2
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1152 -252
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +3778 -1124
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +794 -161
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +32 -31
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/legal.cjs +2 -2
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs +2 -2
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +17 -6
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs +2 -2
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs +2 -2
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +1151 -252
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +3777 -1124
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +793 -161
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +31 -31
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/legal.mjs +2 -2
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts +2 -2
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts +3 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/doc.d.ts +2 -2
- package/dist/types/doc.d.ts.map +1 -1
- package/dist/types/frequentQuestions.d.ts +2 -2
- package/dist/types/frequentQuestions.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/dist/types/legal.d.ts +2 -2
- package/dist/types/legal.d.ts.map +1 -1
- package/docs/ar/intlayer_with_vite+react.md +100 -108
- package/docs/de/intlayer_with_vite+react.md +121 -142
- package/docs/en/CI_CD.md +3 -1
- package/docs/en/autoFill.md +3 -1
- package/docs/en/configuration.md +4 -1
- package/docs/en/dictionary/condition.md +3 -1
- package/docs/en/dictionary/content_extention_customization.md +3 -1
- package/docs/en/dictionary/enumeration.md +3 -1
- package/docs/en/dictionary/file.md +3 -1
- package/docs/en/dictionary/function_fetching.md +3 -1
- package/docs/en/dictionary/get_started.md +3 -1
- package/docs/en/dictionary/insertion.md +3 -1
- package/docs/en/dictionary/markdown.md +3 -1
- package/docs/en/dictionary/nesting.md +3 -1
- package/docs/en/dictionary/translation.md +3 -1
- package/docs/en/how_works_intlayer.md +3 -1
- package/docs/en/index.md +3 -1
- package/docs/en/interest_of_intlayer.md +3 -1
- package/docs/en/intlayer_CMS.md +3 -1
- package/docs/en/intlayer_cli.md +3 -1
- package/docs/en/intlayer_visual_editor.md +3 -1
- package/docs/en/intlayer_with_angular.md +3 -1
- package/docs/en/intlayer_with_create_react_app.md +3 -1
- package/docs/en/intlayer_with_express.md +3 -1
- package/docs/en/intlayer_with_lynx+react.md +3 -1
- package/docs/en/intlayer_with_nextjs_14.md +6 -1
- package/docs/en/intlayer_with_nextjs_15.md +5 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en/intlayer_with_nuxt.md +3 -1
- package/docs/en/intlayer_with_react_native+expo.md +3 -1
- package/docs/en/intlayer_with_vite+preact.md +3 -1
- package/docs/en/intlayer_with_vite+react.md +9 -7
- package/docs/en/intlayer_with_vite+solid.md +3 -1
- package/docs/en/intlayer_with_vite+svelte.md +3 -1
- package/docs/en/intlayer_with_vite+vue.md +3 -1
- package/docs/en/introduction.md +3 -1
- package/docs/en/mcp_server.md +42 -1
- package/docs/en/packages/@intlayer/api/index.md +3 -1
- package/docs/en/packages/@intlayer/chokidar/index.md +3 -1
- package/docs/en/packages/@intlayer/cli/index.md +3 -1
- package/docs/en/packages/@intlayer/config/index.md +3 -1
- package/docs/en/packages/@intlayer/core/index.md +3 -1
- package/docs/en/packages/@intlayer/design-system/index.md +3 -1
- package/docs/en/packages/@intlayer/dictionary-entry/index.md +3 -1
- package/docs/en/packages/@intlayer/editor/index.md +3 -1
- package/docs/en/packages/@intlayer/editor-react/index.md +3 -1
- package/docs/en/packages/@intlayer/webpack/index.md +3 -1
- package/docs/en/packages/angular-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/t.md +3 -1
- package/docs/en/packages/intlayer/getConfiguration.md +3 -1
- package/docs/en/packages/intlayer/getEnumeration.md +3 -1
- package/docs/en/packages/intlayer/getHTMLTextDir.md +3 -1
- package/docs/en/packages/intlayer/getLocaleLang.md +3 -1
- package/docs/en/packages/intlayer/getLocaleName.md +3 -1
- package/docs/en/packages/intlayer/getLocalizedUrl.md +3 -1
- package/docs/en/packages/intlayer/getMultilingualUrls.md +3 -1
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +3 -1
- package/docs/en/packages/intlayer/getTranslation.md +3 -1
- package/docs/en/packages/intlayer/getTranslationContent.md +3 -1
- package/docs/en/packages/intlayer/index.md +3 -1
- package/docs/en/packages/intlayer-cli/index.md +3 -1
- package/docs/en/packages/intlayer-editor/index.md +3 -1
- package/docs/en/packages/lynx-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/t.md +3 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/next-intlayer/useLocale.md +3 -1
- package/docs/en/packages/nuxt-intlayer/index.md +3 -1
- package/docs/en/packages/preact-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/t.md +3 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/react-intlayer/useLocale.md +3 -1
- package/docs/en/packages/react-native-intlayer/index.md +3 -1
- package/docs/en/packages/react-scripts-intlayer/index.md +3 -1
- package/docs/en/packages/solid-intlayer/index.md +3 -1
- package/docs/en/packages/svelte-intlayer/index.md +3 -1
- package/docs/en/packages/vite-intlayer/index.md +3 -1
- package/docs/en/packages/vue-intlayer/index.md +3 -1
- package/docs/en/per_locale_file.md +3 -1
- package/docs/en/roadmap.md +5 -2
- package/docs/en/vs_code_extension.md +3 -1
- package/docs/en-GB/intlayer_with_vite+react.md +64 -83
- package/docs/es/intlayer_with_vite+react.md +91 -94
- package/docs/fr/intlayer_with_vite+react.md +73 -65
- package/docs/hi/intlayer_with_vite+react.md +107 -107
- package/docs/it/intlayer_with_vite+react.md +156 -112
- package/docs/ja/intlayer_with_vite+react.md +153 -218
- package/docs/ko/intlayer_with_vite+react.md +116 -148
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
- package/docs/pt/intlayer_with_vite+react.md +110 -132
- package/docs/ru/intlayer_with_vite+react.md +98 -83
- package/docs/zh/intlayer_with_vite+react.md +147 -184
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +1 -23
- package/frequent_questions/ar/build_error_CI_CD.md +75 -0
- package/frequent_questions/de/build_error_CI_CD.md +75 -0
- package/frequent_questions/en/build_error_CI_CD.md +75 -0
- package/frequent_questions/en-GB/build_error_CI_CD.md +75 -0
- package/frequent_questions/es/build_error_CI_CD.md +75 -0
- package/frequent_questions/fr/build_error_CI_CD.md +75 -0
- package/frequent_questions/hi/build_error_CI_CD.md +75 -0
- package/frequent_questions/it/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/intlayer_command_undefined.md +3 -3
- package/frequent_questions/ko/build_error_CI_CD.md +75 -0
- package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
- package/frequent_questions/pt/build_error_CI_CD.md +75 -0
- package/frequent_questions/ru/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
- package/legal/ar/privacy_notice.md +83 -0
- package/legal/ar/terms_of_service.md +55 -0
- package/legal/de/privacy_notice.md +83 -0
- package/legal/de/terms_of_service.md +55 -0
- package/legal/en/privacy_notice.md +83 -0
- package/legal/en/terms_of_service.md +55 -0
- package/legal/en-GB/privacy_notice.md +83 -0
- package/legal/en-GB/terms_of_service.md +55 -0
- package/legal/es/privacy_notice.md +83 -0
- package/legal/es/terms_of_service.md +55 -0
- package/legal/fr/privacy_notice.md +83 -0
- package/legal/fr/terms_of_service.md +55 -0
- package/legal/hi/privacy_notice.md +83 -0
- package/legal/hi/terms_of_service.md +55 -0
- package/legal/it/privacy_notice.md +83 -0
- package/legal/it/terms_of_service.md +55 -0
- package/legal/ja/privacy_notice.md +83 -0
- package/legal/ja/terms_of_service.md +55 -0
- package/legal/ko/privacy_notice.md +83 -0
- package/legal/ko/terms_of_service.md +55 -0
- package/legal/pt/privacy_notice.md +83 -0
- package/legal/pt/terms_of_service.md +55 -0
- package/legal/ru/privacy_notice.md +83 -0
- package/legal/ru/terms_of_service.md +55 -0
- package/legal/zh/privacy_notice.md +83 -0
- package/legal/zh/terms_of_service.md +55 -0
- package/package.json +7 -6
- package/src/blog.ts +6 -4
- package/src/common.ts +23 -7
- package/src/doc.ts +6 -4
- package/src/frequentQuestions.ts +6 -4
- package/src/generated/blog.entry.ts +1177 -280
- package/src/generated/docs.entry.ts +3868 -1217
- package/src/generated/frequentQuestions.entry.ts +808 -178
- package/src/generated/legal.entry.ts +34 -36
- package/src/legal.ts +6 -4
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt:
|
|
4
|
-
title:
|
|
5
|
-
description: React
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2024-03-07
|
|
4
|
+
title: Vite + ReactでのIntlayerの使い始め
|
|
5
|
+
description: Intlayerを使ってViteとReactアプリケーションに国際化(i18n)を追加する方法を学びます。このガイドに従ってアプリを多言語対応にしましょう。
|
|
6
6
|
keywords:
|
|
7
7
|
- 国際化
|
|
8
8
|
- ドキュメント
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Vite
|
|
11
11
|
- React
|
|
12
|
-
-
|
|
12
|
+
- i18n
|
|
13
13
|
- JavaScript
|
|
14
14
|
slugs:
|
|
15
15
|
- doc
|
|
16
16
|
- environment
|
|
17
|
-
-
|
|
17
|
+
- vite-and-react
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
# Intlayer
|
|
20
|
+
# IntlayerとViteとReactで始める国際化(i18n)
|
|
21
21
|
|
|
22
|
-
GitHub
|
|
22
|
+
GitHubの[アプリケーションテンプレート](https://github.com/aymericzip/intlayer-vite-react-template)を参照してください。
|
|
23
23
|
|
|
24
|
-
## Intlayer
|
|
24
|
+
## Intlayerとは?
|
|
25
25
|
|
|
26
|
-
**Intlayer
|
|
26
|
+
**Intlayer**は、最新のウェブアプリケーションでの多言語対応を簡素化するために設計された革新的なオープンソースの国際化(i18n)ライブラリです。
|
|
27
27
|
|
|
28
|
-
Intlayer
|
|
28
|
+
Intlayerを使うと、以下が可能です:
|
|
29
29
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- **自動生成された型により
|
|
33
|
-
-
|
|
30
|
+
- **コンポーネントレベルで宣言的な辞書を使って** 翻訳を簡単に管理できます。
|
|
31
|
+
- **メタデータ、ルート、コンテンツを動的にローカライズ** できます。
|
|
32
|
+
- **自動生成された型によりTypeScriptサポートを保証** し、オートコンプリートやエラー検出を向上させます。
|
|
33
|
+
- **動的なロケール検出や切り替えなどの高度な機能を活用** できます。
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
## Vite
|
|
37
|
+
## ViteとReactアプリケーションでIntlayerをセットアップするステップバイステップガイド
|
|
38
38
|
|
|
39
|
-
### ステップ
|
|
39
|
+
### ステップ1: 依存関係のインストール
|
|
40
40
|
|
|
41
|
-
npm
|
|
41
|
+
npmを使って必要なパッケージをインストールします:
|
|
42
42
|
|
|
43
43
|
```bash packageManager="npm"
|
|
44
44
|
npm install intlayer react-intlayer
|
|
@@ -60,20 +60,14 @@ yarn add --save-dev vite-intlayer
|
|
|
60
60
|
設定管理、翻訳、[コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/get_started.md)、トランスパイル、および[CLIコマンド](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_cli.md)のための国際化ツールを提供するコアパッケージです。
|
|
61
61
|
|
|
62
62
|
- **react-intlayer**
|
|
63
|
-
IntlayerをReact
|
|
63
|
+
IntlayerをReactアプリケーションと統合するパッケージです。Reactの国際化のためのコンテキストプロバイダーとフックを提供します。
|
|
64
64
|
|
|
65
65
|
- **vite-intlayer**
|
|
66
|
-
/
|
|
66
|
+
Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグイン、およびユーザーの優先ロケール検出、クッキー管理、URLリダイレクト処理のためのミドルウェアを含みます。
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
IntlayerをReactアプリケーションに統合するパッケージです。Reactの国際化のためのコンテキストプロバイダーとフックを提供します。
|
|
70
|
-
|
|
71
|
-
- **vite-intlayer**
|
|
72
|
-
Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグイン、およびユーザーの優先ロケールの検出、クッキー管理、URLリダイレクト処理のためのミドルウェアを含みます。
|
|
68
|
+
### ステップ 2: プロジェクトの設定
|
|
73
69
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
アプリケーションの言語を設定するための設定ファイルを作成します:
|
|
70
|
+
アプリケーションの言語を設定するための設定ファイルを作成します:
|
|
77
71
|
|
|
78
72
|
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
79
73
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -84,7 +78,7 @@ const config: IntlayerConfig = {
|
|
|
84
78
|
Locales.ENGLISH,
|
|
85
79
|
Locales.FRENCH,
|
|
86
80
|
Locales.SPANISH,
|
|
87
|
-
//
|
|
81
|
+
// 他のロケールをここに追加
|
|
88
82
|
],
|
|
89
83
|
defaultLocale: Locales.ENGLISH,
|
|
90
84
|
},
|
|
@@ -103,7 +97,7 @@ const config = {
|
|
|
103
97
|
Locales.ENGLISH,
|
|
104
98
|
Locales.FRENCH,
|
|
105
99
|
Locales.SPANISH,
|
|
106
|
-
//
|
|
100
|
+
// 他のロケールをここに追加
|
|
107
101
|
],
|
|
108
102
|
defaultLocale: Locales.ENGLISH,
|
|
109
103
|
},
|
|
@@ -122,7 +116,7 @@ const config = {
|
|
|
122
116
|
Locales.ENGLISH,
|
|
123
117
|
Locales.FRENCH,
|
|
124
118
|
Locales.SPANISH,
|
|
125
|
-
//
|
|
119
|
+
// 他のロケールをここに追加
|
|
126
120
|
],
|
|
127
121
|
defaultLocale: Locales.ENGLISH,
|
|
128
122
|
},
|
|
@@ -131,11 +125,11 @@ const config = {
|
|
|
131
125
|
module.exports = config;
|
|
132
126
|
```
|
|
133
127
|
|
|
134
|
-
> この設定ファイルを通じて、ローカライズされたURL
|
|
128
|
+
> この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
|
|
135
129
|
|
|
136
130
|
### ステップ3: Vite設定にIntlayerを統合する
|
|
137
131
|
|
|
138
|
-
intlayer
|
|
132
|
+
設定にintlayerプラグインを追加します。
|
|
139
133
|
|
|
140
134
|
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
141
135
|
import { defineConfig } from "vite";
|
|
@@ -148,23 +142,6 @@ export default defineConfig({
|
|
|
148
142
|
});
|
|
149
143
|
```
|
|
150
144
|
|
|
151
|
-
````> この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所や拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
|
|
152
|
-
|
|
153
|
-
### ステップ3: Vite設定にIntlayerを統合する
|
|
154
|
-
|
|
155
|
-
intlayerプラグインを設定に追加します。
|
|
156
|
-
|
|
157
|
-
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
158
|
-
import { defineConfig } from "vite";
|
|
159
|
-
import react from "@vitejs/plugin-react-swc";
|
|
160
|
-
import { intlayerPlugin } from "vite-intlayer";
|
|
161
|
-
|
|
162
|
-
// https://vitejs.dev/config/
|
|
163
|
-
export default defineConfig({
|
|
164
|
-
plugins: [react(), intlayerPlugin()],
|
|
165
|
-
});
|
|
166
|
-
````
|
|
167
|
-
|
|
168
145
|
```javascript fileName="vite.config.mjs" codeFormat="esm"
|
|
169
146
|
import { defineConfig } from "vite";
|
|
170
147
|
import react from "@vitejs/plugin-react-swc";
|
|
@@ -187,34 +164,11 @@ module.exports = defineConfig({
|
|
|
187
164
|
});
|
|
188
165
|
```
|
|
189
166
|
|
|
190
|
-
> `intlayerPlugin()` Viteプラグインは、IntlayerをVite
|
|
191
|
-
|
|
192
|
-
### ステップ4: コンテンツを宣言する
|
|
193
|
-
|
|
194
|
-
翻訳を格納するためのコンテンツ宣言を作成および管理します:
|
|
195
|
-
|
|
196
|
-
```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
|
|
197
|
-
import { t, type Dictionary } from "intlayer";
|
|
198
|
-
import type { ReactNode } from "react";
|
|
199
|
-
|
|
200
|
-
const appContent = {
|
|
201
|
-
key: "app",
|
|
202
|
-
content: {
|
|
203
|
-
viteLogo: t({
|
|
204
|
-
en: "Vite logo",
|
|
205
|
-
fr: "Logo Vite",
|
|
206
|
-
es: "Logo Vite",
|
|
207
|
-
}),
|
|
208
|
-
reactLogo: t({
|
|
209
|
-
en: "React logo",
|
|
210
|
-
fr: "Logo React",
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
> `intlayerPlugin()` Viteプラグインは、IntlayerをViteと統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードで監視されます。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンス最適化のためのエイリアスも提供します。
|
|
167
|
+
> `intlayerPlugin()` Viteプラグインは、IntlayerをViteと統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードで監視されます。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンスを最適化するためのエイリアスも提供します。
|
|
214
168
|
|
|
215
169
|
### ステップ4: コンテンツを宣言する
|
|
216
170
|
|
|
217
|
-
|
|
171
|
+
翻訳を格納するためのコンテンツ宣言を作成および管理します:
|
|
218
172
|
|
|
219
173
|
```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
|
|
220
174
|
import { t, type Dictionary } from "intlayer";
|
|
@@ -245,17 +199,17 @@ const appContent = {
|
|
|
245
199
|
edit: t<ReactNode>({
|
|
246
200
|
en: (
|
|
247
201
|
<>
|
|
248
|
-
<code>src/App.tsx</code> を編集して保存し、HMR
|
|
202
|
+
<code>src/App.tsx</code> を編集して保存し、HMRをテストします
|
|
249
203
|
</>
|
|
250
204
|
),
|
|
251
205
|
fr: (
|
|
252
206
|
<>
|
|
253
|
-
<code>src/App.tsx</code> を編集して保存し、HMR
|
|
207
|
+
<code>src/App.tsx</code> を編集して保存し、HMRをテストします
|
|
254
208
|
</>
|
|
255
209
|
),
|
|
256
210
|
es: (
|
|
257
211
|
<>
|
|
258
|
-
<code>src/App.tsx</code> を編集して保存し、HMR
|
|
212
|
+
<code>src/App.tsx</code> を編集して保存し、HMRをテストします
|
|
259
213
|
</>
|
|
260
214
|
),
|
|
261
215
|
}),
|
|
@@ -321,7 +275,7 @@ const appContent = {
|
|
|
321
275
|
},
|
|
322
276
|
|
|
323
277
|
readTheDocs: t({
|
|
324
|
-
en: "
|
|
278
|
+
en: "ViteとReactのロゴをクリックして詳細を確認してください",
|
|
325
279
|
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
326
280
|
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
327
281
|
}),
|
|
@@ -339,13 +293,11 @@ const appContent = {
|
|
|
339
293
|
key: "app",
|
|
340
294
|
content: {
|
|
341
295
|
viteLogo: t({
|
|
342
|
-
ja: "Vite ロゴ",
|
|
343
296
|
en: "Vite logo",
|
|
344
297
|
fr: "Logo Vite",
|
|
345
298
|
es: "Logo Vite",
|
|
346
299
|
}),
|
|
347
300
|
reactLogo: t({
|
|
348
|
-
ja: "React ロゴ",
|
|
349
301
|
en: "React logo",
|
|
350
302
|
fr: "Logo React",
|
|
351
303
|
es: "Logo React",
|
|
@@ -354,7 +306,6 @@ const appContent = {
|
|
|
354
306
|
title: "Vite + React",
|
|
355
307
|
|
|
356
308
|
count: t({
|
|
357
|
-
ja: "カウントは ",
|
|
358
309
|
en: "count is ",
|
|
359
310
|
fr: "le compte est ",
|
|
360
311
|
es: "el recuento es ",
|
|
@@ -365,11 +316,6 @@ const appContent = {
|
|
|
365
316
|
ReactNode >
|
|
366
317
|
{
|
|
367
318
|
// コンテンツ内でReactノードを使用する場合はReactをインポートすることを忘れないでください
|
|
368
|
-
ja: (
|
|
369
|
-
<>
|
|
370
|
-
<code>src/App.tsx</code> を編集して保存し、HMRをテストします
|
|
371
|
-
</>
|
|
372
|
-
),
|
|
373
319
|
en: (
|
|
374
320
|
<>
|
|
375
321
|
Edit <code>src/App.tsx</code> and save to test HMR
|
|
@@ -391,7 +337,7 @@ const appContent = {
|
|
|
391
337
|
en: "Click on the Vite and React logos to learn more",
|
|
392
338
|
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
393
339
|
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
394
|
-
ja: "ViteとReact
|
|
340
|
+
ja: "詳細を知るには、Vite と React のロゴをクリックしてください",
|
|
395
341
|
}),
|
|
396
342
|
},
|
|
397
343
|
};
|
|
@@ -410,7 +356,7 @@ module.exports = appContent;
|
|
|
410
356
|
"en": "Vite logo",
|
|
411
357
|
"fr": "Logo Vite",
|
|
412
358
|
"es": "Logo Vite",
|
|
413
|
-
"ja": "Viteロゴ"
|
|
359
|
+
"ja": "Vite ロゴ"
|
|
414
360
|
}
|
|
415
361
|
},
|
|
416
362
|
"reactLogo": {
|
|
@@ -443,7 +389,7 @@ module.exports = appContent;
|
|
|
443
389
|
"edit": {
|
|
444
390
|
"nodeType": "translation",
|
|
445
391
|
"translation": {
|
|
446
|
-
"ja": "src/App.tsx を編集して保存し、HMR
|
|
392
|
+
"ja": "src/App.tsx を編集して保存し、HMR をテストしてください",
|
|
447
393
|
"en": "Edit src/App.tsx and save to test HMR",
|
|
448
394
|
"fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
|
|
449
395
|
"es": "Edita src/App.tsx y guarda para probar HMR"
|
|
@@ -452,7 +398,8 @@ module.exports = appContent;
|
|
|
452
398
|
"readTheDocs": {
|
|
453
399
|
"nodeType": "translation",
|
|
454
400
|
"translation": {
|
|
455
|
-
"ja": "Vite
|
|
401
|
+
"ja": "ViteとReactのロゴをクリックして詳細を学びましょう",
|
|
402
|
+
"en": "Click on the Vite and React logos to learn more",
|
|
456
403
|
"fr": "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
457
404
|
"es": "Haga clic en los logotipos de Vite y React para obtener más información"
|
|
458
405
|
}
|
|
@@ -461,11 +408,11 @@ module.exports = appContent;
|
|
|
461
408
|
}
|
|
462
409
|
```
|
|
463
410
|
|
|
464
|
-
> あなたのコンテンツ宣言は、`contentDir
|
|
411
|
+
> あなたのコンテンツ宣言は、`contentDir`ディレクトリ(デフォルトは`./src`)に含まれた時点で、アプリケーションのどこにでも定義できます。そして、コンテンツ宣言ファイルの拡張子(デフォルトは`.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)に一致する必要があります。
|
|
465
412
|
|
|
466
413
|
> 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/get_started.md)を参照してください。
|
|
467
414
|
|
|
468
|
-
> コンテンツファイルに
|
|
415
|
+
> コンテンツファイルにTSXコードが含まれている場合は、`import React from "react";`をコンテンツファイルにインポートすることを検討してください。
|
|
469
416
|
|
|
470
417
|
### ステップ5: コード内でIntlayerを利用する
|
|
471
418
|
|
|
@@ -590,16 +537,15 @@ const AppContent = () => {
|
|
|
590
537
|
/>
|
|
591
538
|
</a>
|
|
592
539
|
</div>
|
|
593
|
-
<h1>{content.title}</h1>
|
|
540
|
+
<h1>{content.title}</h1>
|
|
594
541
|
<div className="card">
|
|
595
542
|
<button onClick={() => setCount((count) => count + 1)}>
|
|
596
543
|
{content.count}
|
|
597
544
|
{count}
|
|
598
545
|
</button>
|
|
599
|
-
<p>{content.edit}</p>
|
|
546
|
+
<p>{content.edit}</p>
|
|
600
547
|
</div>
|
|
601
|
-
<p className="read-the-docs">{content.readTheDocs}</p>
|
|
602
|
-
{/* ドキュメントを読む案内 */}
|
|
548
|
+
<p className="read-the-docs">{content.readTheDocs}</p>
|
|
603
549
|
</>
|
|
604
550
|
);
|
|
605
551
|
};
|
|
@@ -615,47 +561,13 @@ module.exports = App;
|
|
|
615
561
|
|
|
616
562
|
> もし `alt`、`title`、`href`、`aria-label` などの `string` 属性でコンテンツを使用したい場合は、関数の値を呼び出す必要があります。例えば:
|
|
617
563
|
|
|
618
|
-
> ```jsx
|
|
619
|
-
> <img src={content.image.src.value} alt={content.image.value} />
|
|
620
|
-
> ```
|
|
621
|
-
|
|
622
|
-
alt={content.reactLogo.value}
|
|
623
|
-
/>
|
|
624
|
-
</a>
|
|
625
|
-
</div>
|
|
626
|
-
<h1>{content.title}</h1>
|
|
627
|
-
<div className="card">
|
|
628
|
-
<button onClick={() => setCount((count) => count + 1)}>
|
|
629
|
-
{content.count}
|
|
630
|
-
{count}
|
|
631
|
-
</button>
|
|
632
|
-
<p>{content.edit}</p>
|
|
633
|
-
</div>
|
|
634
|
-
<p className="read-the-docs">{content.readTheDocs}</p>
|
|
635
|
-
</>
|
|
636
|
-
|
|
637
|
-
);
|
|
638
|
-
};
|
|
639
|
-
|
|
640
|
-
const App = () => (
|
|
641
|
-
<IntlayerProvider>
|
|
642
|
-
<AppContent />
|
|
643
|
-
</IntlayerProvider>
|
|
644
|
-
);
|
|
645
|
-
|
|
646
|
-
module.exports = App;
|
|
647
|
-
|
|
648
|
-
````
|
|
649
|
-
|
|
650
|
-
> `alt`、`title`、`href`、`aria-label`などの`string`属性でコンテンツを使用したい場合は、関数の値を呼び出す必要があります。例えば:
|
|
651
|
-
|
|
652
564
|
> ```jsx
|
|
653
565
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
654
566
|
> ```
|
|
655
567
|
|
|
656
568
|
> `useIntlayer` フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useIntlayer.md)を参照してください。
|
|
657
569
|
|
|
658
|
-
### (オプション)ステップ6
|
|
570
|
+
### (オプション)ステップ6: コンテンツの言語を変更する
|
|
659
571
|
|
|
660
572
|
コンテンツの言語を変更するには、`useLocale` フックが提供する `setLocale` 関数を使用します。この関数を使うことで、アプリケーションのロケールを設定し、それに応じてコンテンツを更新できます。
|
|
661
573
|
|
|
@@ -668,12 +580,10 @@ const LocaleSwitcher: FC = () => {
|
|
|
668
580
|
const { setLocale } = useLocale();
|
|
669
581
|
|
|
670
582
|
return (
|
|
671
|
-
<button onClick={() => setLocale(Locales.English)}>
|
|
672
|
-
英語に言語を変更
|
|
673
|
-
</button>
|
|
583
|
+
<button onClick={() => setLocale(Locales.English)}>英語に言語を変更</button>
|
|
674
584
|
);
|
|
675
585
|
};
|
|
676
|
-
|
|
586
|
+
```
|
|
677
587
|
|
|
678
588
|
```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
|
|
679
589
|
import { Locales } from "intlayer";
|
|
@@ -705,7 +615,7 @@ const LocaleSwitcher = () => {
|
|
|
705
615
|
|
|
706
616
|
### (オプション)ステップ7:アプリケーションにローカライズされたルーティングを追加する
|
|
707
617
|
|
|
708
|
-
このステップの目的は、各言語ごとにユニークなルートを作成することです。これはSEO
|
|
618
|
+
このステップの目的は、各言語ごとにユニークなルートを作成することです。これはSEOやSEOに適したURLに役立ちます。
|
|
709
619
|
例:
|
|
710
620
|
|
|
711
621
|
```plaintext
|
|
@@ -714,7 +624,7 @@ const LocaleSwitcher = () => {
|
|
|
714
624
|
- https://example.com/fr/about
|
|
715
625
|
```
|
|
716
626
|
|
|
717
|
-
>
|
|
627
|
+
> デフォルトでは、ルートはデフォルトロケールに対してプレフィックスが付きません。デフォルトロケールにもプレフィックスを付けたい場合は、設定の `middleware.prefixDefault` オプションを `true` に設定できます。詳細は[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
|
|
718
628
|
|
|
719
629
|
アプリケーションにローカライズされたルーティングを追加するには、アプリケーションのルートをラップし、ロケールベースのルーティングを処理する `LocaleRouter` コンポーネントを作成できます。以下は [React Router](https://reactrouter.com/home) を使用した例です。
|
|
720
630
|
|
|
@@ -729,7 +639,7 @@ import {
|
|
|
729
639
|
Route,
|
|
730
640
|
Navigate,
|
|
731
641
|
useLocation,
|
|
732
|
-
} from "react-router-dom"; //
|
|
642
|
+
} from "react-router-dom"; // ナビゲーション管理用のルーターコンポーネント
|
|
733
643
|
|
|
734
644
|
// Intlayerから設定を分割代入
|
|
735
645
|
const { internationalization, middleware } = configuration;
|
|
@@ -748,13 +658,13 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
748
658
|
// 現在のロケールを決定し、指定がなければデフォルトロケールを使用
|
|
749
659
|
const currentLocale = locale ?? defaultLocale;
|
|
750
660
|
|
|
751
|
-
//
|
|
661
|
+
// パスからロケールのプレフィックスを取り除き、ベースパスを構築
|
|
752
662
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
753
663
|
pathname // 現在のURLパス
|
|
754
664
|
);
|
|
755
665
|
|
|
756
666
|
/**
|
|
757
|
-
* middleware.prefixDefaultがtrue
|
|
667
|
+
* middleware.prefixDefaultがtrueの場合、デフォルトロケールには常にプレフィックスを付ける必要があります。
|
|
758
668
|
*/
|
|
759
669
|
if (middleware.prefixDefault) {
|
|
760
670
|
// ロケールの検証
|
|
@@ -774,8 +684,8 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
774
684
|
);
|
|
775
685
|
} else {
|
|
776
686
|
/**
|
|
777
|
-
* middleware.prefixDefaultがfalse
|
|
778
|
-
*
|
|
687
|
+
* middleware.prefixDefaultがfalseの場合、デフォルトロケールはプレフィックスされません。
|
|
688
|
+
* 現在のロケールが有効であり、デフォルトロケールでないことを確認します。
|
|
779
689
|
*/
|
|
780
690
|
if (
|
|
781
691
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -785,11 +695,11 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
785
695
|
)
|
|
786
696
|
.includes(currentLocale) // 現在のロケールが有効なロケールのリストに含まれているかをチェック
|
|
787
697
|
) {
|
|
788
|
-
//
|
|
698
|
+
// ロケールのプレフィックスなしのパスへリダイレクト
|
|
789
699
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
790
700
|
}
|
|
791
701
|
|
|
792
|
-
// IntlayerProvider
|
|
702
|
+
// IntlayerProviderで子要素をラップし、現在のロケールを設定
|
|
793
703
|
return (
|
|
794
704
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
795
705
|
);
|
|
@@ -798,7 +708,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
798
708
|
|
|
799
709
|
/**
|
|
800
710
|
* ロケール固有のルートを設定するルーターコンポーネント。
|
|
801
|
-
* React Router
|
|
711
|
+
* React Routerを使用してナビゲーションを管理し、ローカライズされたコンポーネントをレンダリングします。
|
|
802
712
|
*/
|
|
803
713
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
804
714
|
<BrowserRouter>
|
|
@@ -843,7 +753,7 @@ import {
|
|
|
843
753
|
Route,
|
|
844
754
|
Navigate,
|
|
845
755
|
useLocation,
|
|
846
|
-
} from "react-router-dom"; //
|
|
756
|
+
} from "react-router-dom"; // ナビゲーション管理のためのルーターコンポーネント
|
|
847
757
|
|
|
848
758
|
// Intlayerからの設定の分割代入
|
|
849
759
|
const { internationalization, middleware } = configuration;
|
|
@@ -857,7 +767,7 @@ const { locales, defaultLocale } = internationalization;
|
|
|
857
767
|
const AppLocalized = ({ children, locale }) => {
|
|
858
768
|
const { pathname, search } = useLocation(); // 現在のURLパスを取得
|
|
859
769
|
|
|
860
|
-
//
|
|
770
|
+
// 現在のロケールを決定し、指定がなければデフォルトにフォールバック
|
|
861
771
|
const currentLocale = locale ?? defaultLocale;
|
|
862
772
|
|
|
863
773
|
// パスからロケールのプレフィックスを削除してベースパスを構築
|
|
@@ -880,14 +790,14 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
880
790
|
);
|
|
881
791
|
}
|
|
882
792
|
|
|
883
|
-
// IntlayerProvider
|
|
793
|
+
// IntlayerProviderで子要素をラップし、現在のロケールを設定します
|
|
884
794
|
return (
|
|
885
795
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
886
796
|
);
|
|
887
797
|
} else {
|
|
888
798
|
/**
|
|
889
799
|
* middleware.prefixDefaultがfalseの場合、デフォルトロケールはプレフィックスされません。
|
|
890
|
-
*
|
|
800
|
+
* 現在のロケールが有効であり、デフォルトロケールでないことを確認します。
|
|
891
801
|
*/
|
|
892
802
|
if (
|
|
893
803
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -897,11 +807,11 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
897
807
|
)
|
|
898
808
|
.includes(currentLocale) // 現在のロケールが有効なロケールのリストに含まれているかをチェック
|
|
899
809
|
) {
|
|
900
|
-
//
|
|
810
|
+
// ロケールのプレフィックスなしのパスにリダイレクト
|
|
901
811
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
902
812
|
}
|
|
903
813
|
|
|
904
|
-
// IntlayerProvider
|
|
814
|
+
// IntlayerProviderで子要素をラップし、現在のロケールを設定
|
|
905
815
|
return (
|
|
906
816
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
907
817
|
);
|
|
@@ -921,7 +831,7 @@ export const LocaleRouter = ({ children }) => (
|
|
|
921
831
|
)
|
|
922
832
|
.map((locale) => (
|
|
923
833
|
<Route
|
|
924
|
-
//
|
|
834
|
+
// ロケールをキャプチャするルートパターン(例:/en/、/fr/)およびその後のすべてのパスにマッチ
|
|
925
835
|
path={`/${locale}/*`}
|
|
926
836
|
key={locale}
|
|
927
837
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // ロケール管理で子要素をラップ
|
|
@@ -954,14 +864,14 @@ const {
|
|
|
954
864
|
Route,
|
|
955
865
|
Navigate,
|
|
956
866
|
useLocation,
|
|
957
|
-
} = require("react-router-dom"); //
|
|
867
|
+
} = require("react-router-dom"); // ナビゲーション管理のためのルーターコンポーネント
|
|
958
868
|
|
|
959
869
|
// Intlayerからの設定の分割代入
|
|
960
870
|
const { internationalization, middleware } = configuration;
|
|
961
871
|
const { locales, defaultLocale } = internationalization;
|
|
962
872
|
|
|
963
873
|
/**
|
|
964
|
-
*
|
|
874
|
+
* ローカリゼーションを処理し、子要素を適切なロケールコンテキストでラップするコンポーネント。
|
|
965
875
|
* URLベースのロケール検出と検証を管理する。
|
|
966
876
|
*/
|
|
967
877
|
const AppLocalized = ({ children, locale }) => {
|
|
@@ -970,7 +880,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
970
880
|
// 現在のロケールを決定。指定がなければデフォルトロケールを使用
|
|
971
881
|
const currentLocale = locale ?? defaultLocale;
|
|
972
882
|
|
|
973
|
-
//
|
|
883
|
+
// パスからロケールのプレフィックスを取り除き、ベースパスを作成
|
|
974
884
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
975
885
|
pathname // 現在のURLパス
|
|
976
886
|
);
|
|
@@ -990,7 +900,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
990
900
|
);
|
|
991
901
|
}
|
|
992
902
|
|
|
993
|
-
// IntlayerProvider
|
|
903
|
+
// IntlayerProviderで子要素をラップし、現在のロケールを設定します
|
|
994
904
|
return (
|
|
995
905
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
996
906
|
);
|
|
@@ -1011,7 +921,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
1011
921
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
1012
922
|
}
|
|
1013
923
|
|
|
1014
|
-
// IntlayerProvider
|
|
924
|
+
// IntlayerProviderで子要素をラップし、現在のロケールを設定
|
|
1015
925
|
return (
|
|
1016
926
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
1017
927
|
);
|
|
@@ -1093,7 +1003,7 @@ const App = () => (
|
|
|
1093
1003
|
);
|
|
1094
1004
|
```
|
|
1095
1005
|
|
|
1096
|
-
並行して、`intLayerMiddlewarePlugin`
|
|
1006
|
+
並行して、`intLayerMiddlewarePlugin` を使用してアプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインは、URL に基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最も適切なロケールを判断します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
|
|
1097
1007
|
|
|
1098
1008
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1099
1009
|
import { defineConfig } from "vite";
|
|
@@ -1128,9 +1038,9 @@ module.exports = defineConfig({
|
|
|
1128
1038
|
});
|
|
1129
1039
|
```
|
|
1130
1040
|
|
|
1131
|
-
### (オプション)ステップ8
|
|
1041
|
+
### (オプション)ステップ8:ロケールが変更されたときにURLを変更する
|
|
1132
1042
|
|
|
1133
|
-
ロケールが変更されたときにURLを変更するには、`useLocale`フックが提供する`onLocaleChange`プロパティを使用できます。同時に、`react-router-dom`の`useLocation`と`useNavigate
|
|
1043
|
+
ロケールが変更されたときにURLを変更するには、`useLocale`フックが提供する`onLocaleChange`プロパティを使用できます。同時に、`react-router-dom`の`useLocation`と`useNavigate`フックを使用してURLパスを更新できます。
|
|
1134
1044
|
|
|
1135
1045
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
1136
1046
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -1246,7 +1156,7 @@ const LocaleSwitcher = () => {
|
|
|
1246
1156
|
{getLocaleName(localeItem, locale)}
|
|
1247
1157
|
</span>
|
|
1248
1158
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1249
|
-
{/* 現在のロケールでの言語名 - 例:
|
|
1159
|
+
{/* 現在のロケールでの言語名 - 例: Locales.SPANISH に設定された現在のロケールでの "Francés" */}
|
|
1250
1160
|
{getLocaleName(localeItem)}
|
|
1251
1161
|
</span>
|
|
1252
1162
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1310,7 +1220,7 @@ const LocaleSwitcher = () => {
|
|
|
1310
1220
|
{getLocaleName(localeItem, locale)}
|
|
1311
1221
|
</span>
|
|
1312
1222
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1313
|
-
{/* 現在のロケールでの言語名 - 例: Locales.SPANISH
|
|
1223
|
+
{/* 現在のロケールでの言語名 - 例: Locales.SPANISHに設定された現在のロケールでのFrancés */}
|
|
1314
1224
|
{getLocaleName(localeItem)}
|
|
1315
1225
|
</span>
|
|
1316
1226
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1340,13 +1250,13 @@ const LocaleSwitcher = () => {
|
|
|
1340
1250
|
|
|
1341
1251
|
---
|
|
1342
1252
|
|
|
1343
|
-
###
|
|
1253
|
+
### (オプション)ステップ9: HTMLの言語属性と方向属性を切り替える
|
|
1344
1254
|
|
|
1345
|
-
アプリケーションが複数の言語をサポートしている場合、`<html>`タグの`lang`属性と`dir
|
|
1255
|
+
アプリケーションが複数の言語をサポートしている場合、`<html>`タグの`lang`属性と`dir`属性を現在のロケールに合わせて更新することが非常に重要です。これにより、以下が保証されます:
|
|
1346
1256
|
|
|
1347
1257
|
- **アクセシビリティ**:スクリーンリーダーや支援技術は、正しい`lang`属性に依存してコンテンツを正確に発音・解釈します。
|
|
1348
|
-
- **テキストのレンダリング**:`dir
|
|
1349
|
-
- **SEO**:検索エンジンは`lang
|
|
1258
|
+
- **テキストのレンダリング**:`dir`(方向)属性は、テキストが適切な順序(例:英語は左から右、アラビア語やヘブライ語は右から左)で表示されることを保証し、読みやすさに不可欠です。
|
|
1259
|
+
- **SEO**:検索エンジンは`lang`属性を使用してページの言語を判別し、適切なローカライズされたコンテンツを検索結果に提供します。
|
|
1350
1260
|
|
|
1351
1261
|
ロケールが変更されるたびにこれらの属性を動的に更新することで、すべての対応言語において一貫性がありアクセシブルなユーザー体験を保証します。
|
|
1352
1262
|
|
|
@@ -1362,7 +1272,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1362
1272
|
/**
|
|
1363
1273
|
* 現在のロケールに基づいてHTMLの<html>要素の`lang`および`dir`属性を更新します。
|
|
1364
1274
|
* - `lang`: ブラウザや検索エンジンにページの言語を通知します。
|
|
1365
|
-
* - `dir`:
|
|
1275
|
+
* - `dir`: 正しい読み順を保証します(例:英語は'ltr'、アラビア語は'rtl')。
|
|
1366
1276
|
*
|
|
1367
1277
|
* この動的な更新は、適切なテキストレンダリング、アクセシビリティ、およびSEOに不可欠です。
|
|
1368
1278
|
*/
|
|
@@ -1457,13 +1367,39 @@ const App: FC = () => (
|
|
|
1457
1367
|
export default App;
|
|
1458
1368
|
```
|
|
1459
1369
|
|
|
1370
|
+
#### アプリケーションでのフックの使用
|
|
1371
|
+
|
|
1372
|
+
フックをメインコンポーネントに統合し、ロケールが変更されるたびにHTML属性が更新されるようにします:
|
|
1373
|
+
|
|
1374
|
+
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
1375
|
+
import type { FC } from "react";
|
|
1376
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1377
|
+
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1378
|
+
import "./App.css";
|
|
1379
|
+
|
|
1380
|
+
const AppContent: FC = () => {
|
|
1381
|
+
// ロケールに基づいて<html>タグのlangとdir属性を更新するためにフックを適用します。
|
|
1382
|
+
useI18nHTMLAttributes();
|
|
1383
|
+
|
|
1384
|
+
// ... コンポーネントの残りの部分
|
|
1385
|
+
};
|
|
1386
|
+
|
|
1387
|
+
const App: FC = () => (
|
|
1388
|
+
<IntlayerProvider>
|
|
1389
|
+
<AppContent />
|
|
1390
|
+
</IntlayerProvider>
|
|
1391
|
+
);
|
|
1392
|
+
|
|
1393
|
+
export default App;
|
|
1394
|
+
```
|
|
1395
|
+
|
|
1460
1396
|
```jsx fileName="src/App.msx" codeFormat="esm"
|
|
1461
|
-
import { IntlayerProvider, useIntlayer } from "react
|
|
1397
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
1462
1398
|
import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
1463
1399
|
import "./App.css";
|
|
1464
1400
|
|
|
1465
1401
|
const AppContent = () => {
|
|
1466
|
-
//
|
|
1402
|
+
// ロケールに基づいて<html>タグのlangとdir属性を更新するためにフックを適用します。
|
|
1467
1403
|
useI18nHTMLAttributes();
|
|
1468
1404
|
|
|
1469
1405
|
// ... コンポーネントの残りの部分
|
|
@@ -1485,12 +1421,7 @@ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
|
1485
1421
|
require("./App.css");
|
|
1486
1422
|
|
|
1487
1423
|
const AppContent = () => {
|
|
1488
|
-
//
|
|
1489
|
-
useI18nHTMLAttributes();
|
|
1490
|
-
|
|
1491
|
-
// ... コンポーネントの残りの部分
|
|
1492
|
-
};
|
|
1493
|
-
// ロケールに基づいて <html> タグの lang および dir 属性を更新するためのフックを適用します。
|
|
1424
|
+
// ロケールに基づいて<html>タグのlangとdir属性を更新するためにフックを適用します。
|
|
1494
1425
|
useI18nHTMLAttributes();
|
|
1495
1426
|
|
|
1496
1427
|
// ... コンポーネントの残りの部分
|
|
@@ -1505,9 +1436,17 @@ const App = () => (
|
|
|
1505
1436
|
module.exports = App;
|
|
1506
1437
|
```
|
|
1507
1438
|
|
|
1508
|
-
|
|
1439
|
+
これらの変更を適用することで、アプリケーションは以下を実現します:
|
|
1509
1440
|
|
|
1510
|
-
-
|
|
1441
|
+
- 現在のロケールを正確に反映する**言語**(`lang`)属性を確実に設定し、SEOやブラウザの動作に重要な役割を果たします。
|
|
1442
|
+
- ロケールに応じて**テキストの方向**(`dir`)を調整し、異なる読み順の言語に対して読みやすさと使いやすさを向上させます。
|
|
1443
|
+
- これらの属性に依存する支援技術のために、より**アクセシブル**な体験を提供します。
|
|
1444
|
+
|
|
1445
|
+
### (オプション)ステップ10:ローカライズされたリンクコンポーネントの作成
|
|
1446
|
+
|
|
1447
|
+
これらの変更を適用することで、アプリケーションは以下を実現します:
|
|
1448
|
+
|
|
1449
|
+
- **言語**(`lang`)属性が現在のロケールを正確に反映し、SEOやブラウザの動作に重要な役割を果たします。
|
|
1511
1450
|
- ロケールに応じて**テキストの方向**(`dir`)を調整し、異なる読み方向の言語に対して読みやすさと使いやすさを向上させます。
|
|
1512
1451
|
- 支援技術がこれらの属性に依存して最適に機能するため、より**アクセシブル**な体験を提供します。
|
|
1513
1452
|
|
|
@@ -1517,11 +1456,11 @@ module.exports = App;
|
|
|
1517
1456
|
|
|
1518
1457
|
この動作は以下の理由で有用です:
|
|
1519
1458
|
|
|
1520
|
-
- **SEO
|
|
1459
|
+
- **SEOとユーザー体験**:ローカライズされたURLは、検索エンジンが言語別のページを正しくインデックスし、ユーザーに好みの言語でコンテンツを提供するのに役立ちます。
|
|
1521
1460
|
- **一貫性**:アプリケーション全体でローカライズされたリンクを使用することで、ナビゲーションが現在のロケール内に留まり、予期しない言語の切り替えを防ぎます。
|
|
1522
1461
|
- **保守性**: ローカリゼーションのロジックを単一のコンポーネントに集約することで、URLの管理が簡素化され、アプリケーションの成長に伴いコードベースの保守や拡張が容易になります。
|
|
1523
1462
|
|
|
1524
|
-
以下は、TypeScript
|
|
1463
|
+
以下は、TypeScriptで実装されたローカライズされた `Link` コンポーネントの例です。
|
|
1525
1464
|
|
|
1526
1465
|
```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
|
|
1527
1466
|
import { getLocalizedUrl } from "intlayer";
|
|
@@ -1546,7 +1485,7 @@ export const checkIsExternalLink = (href?: string): boolean =>
|
|
|
1546
1485
|
/^https?:\/\//.test(href ?? "");
|
|
1547
1486
|
|
|
1548
1487
|
/**
|
|
1549
|
-
* 現在のロケールに基づいてhref
|
|
1488
|
+
* 現在のロケールに基づいてhref属性を適応するカスタムLinkコンポーネント。
|
|
1550
1489
|
* 内部リンクの場合、`getLocalizedUrl`を使用してURLの先頭にロケールを付加します(例:/fr/about)。
|
|
1551
1490
|
* これにより、ナビゲーションが同じロケールコンテキスト内に留まることを保証します。
|
|
1552
1491
|
*/
|
|
@@ -1585,13 +1524,13 @@ export const checkIsExternalLink = (href?: string): boolean =>
|
|
|
1585
1524
|
/**
|
|
1586
1525
|
* 現在のロケールに基づいてhref属性を適応させるカスタムLinkコンポーネント。
|
|
1587
1526
|
* 内部リンクの場合、`getLocalizedUrl`を使用してURLにロケールのプレフィックスを付けます(例:/fr/about)。
|
|
1588
|
-
*
|
|
1527
|
+
* これにより、ナビゲーションが同じロケールのコンテキスト内に留まることが保証されます。
|
|
1589
1528
|
*/
|
|
1590
1529
|
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1591
1530
|
const { locale } = useLocale();
|
|
1592
1531
|
const isExternalLink = checkIsExternalLink(href);
|
|
1593
1532
|
|
|
1594
|
-
// リンクが内部リンクで有効な
|
|
1533
|
+
// リンクが内部リンクで有効なhrefが提供されている場合、ローカライズされたURLを取得します。
|
|
1595
1534
|
const hrefI18n =
|
|
1596
1535
|
href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
|
|
1597
1536
|
|
|
@@ -1611,21 +1550,21 @@ const { useLocale } = require("react-intlayer");
|
|
|
1611
1550
|
const { forwardRef } = require("react");
|
|
1612
1551
|
|
|
1613
1552
|
/**
|
|
1614
|
-
* 指定された
|
|
1615
|
-
* URL
|
|
1553
|
+
* 指定されたURLが外部リンクかどうかをチェックするユーティリティ関数。
|
|
1554
|
+
* URLが http:// または https:// で始まる場合、外部リンクと見なされます。
|
|
1616
1555
|
*/
|
|
1617
1556
|
const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
1618
1557
|
|
|
1619
1558
|
/**
|
|
1620
|
-
* 現在のロケールに基づいてhref
|
|
1621
|
-
* 内部リンクの場合、`getLocalizedUrl
|
|
1622
|
-
*
|
|
1559
|
+
* 現在のロケールに基づいて href 属性を適応するカスタム Link コンポーネント。
|
|
1560
|
+
* 内部リンクの場合、`getLocalizedUrl` を使用して URL にロケールをプレフィックスします(例: /fr/about)。
|
|
1561
|
+
* これにより、ナビゲーションが同じロケールのコンテキスト内に留まることが保証されます。
|
|
1623
1562
|
*/
|
|
1624
1563
|
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1625
1564
|
const { locale } = useLocale();
|
|
1626
1565
|
const isExternalLink = checkIsExternalLink(href);
|
|
1627
1566
|
|
|
1628
|
-
// リンクが内部リンクで有効なhrefが提供されている場合、ローカライズされたURLを取得します。
|
|
1567
|
+
// リンクが内部リンクで有効な href が提供されている場合、ローカライズされた URL を取得します。
|
|
1629
1568
|
const localizedHref = isExternalLink ? href : getLocalizedUrl(href, locale);
|
|
1630
1569
|
|
|
1631
1570
|
return (
|
|
@@ -1646,77 +1585,73 @@ Link.displayName = "Link";
|
|
|
1646
1585
|
#### 動作の仕組み
|
|
1647
1586
|
|
|
1648
1587
|
- **外部リンクの検出**:
|
|
1649
|
-
ヘルパー関数 `checkIsExternalLink` は、URL
|
|
1588
|
+
ヘルパー関数 `checkIsExternalLink` は、URLが外部リンクかどうかを判定します。外部リンクはローカライズの必要がないため、そのままにされます。
|
|
1650
1589
|
|
|
1651
1590
|
- **現在のロケールの取得**:
|
|
1652
|
-
`useLocale`
|
|
1591
|
+
`useLocale` フックは現在のロケール(例:フランス語の場合は `fr`)を提供します。
|
|
1653
1592
|
|
|
1654
1593
|
- **URLのローカライズ**:
|
|
1655
|
-
|
|
1594
|
+
内部リンク(すなわち外部リンクでない場合)には、`getLocalizedUrl` が使用され、URLの先頭に現在のロケールを自動的に付加します。例えば、ユーザーがフランス語環境にいる場合、`href` に `/about` を渡すと `/fr/about` に変換されます。
|
|
1656
1595
|
|
|
1657
1596
|
- **リンクの返却**:
|
|
1658
|
-
コンポーネントはローカライズされたURLを持つ `<a>`
|
|
1597
|
+
コンポーネントはローカライズされたURLを持つ `<a>` 要素を返し、ナビゲーションがロケールに一貫して対応するようにします。
|
|
1659
1598
|
|
|
1660
|
-
この `Link` コンポーネントをアプリケーション全体に統合することで、一貫性のある言語対応のユーザー体験を維持しつつ、SEO
|
|
1599
|
+
この `Link` コンポーネントをアプリケーション全体に統合することで、一貫性のある言語対応のユーザー体験を維持しつつ、SEOや使いやすさの向上も実現できます。
|
|
1661
1600
|
|
|
1662
|
-
### TypeScriptの設定
|
|
1601
|
+
### TypeScript の設定
|
|
1663
1602
|
|
|
1664
|
-
Intlayer
|
|
1603
|
+
Intlayer はモジュール拡張を利用して TypeScript の利点を活かし、コードベースをより強固にします。
|
|
1665
1604
|
|
|
1666
1605
|

|
|
1667
1606
|
|
|
1668
1607
|

|
|
1669
1608
|
|
|
1670
|
-
TypeScriptの設定に自動生成された型が含まれていることを確認してください。
|
|
1609
|
+
TypeScript の設定に自動生成された型が含まれていることを確認してください。
|
|
1671
1610
|
|
|
1672
|
-
|
|
1673
|
-
{
|
|
1674
|
-
// ... 既存のTypeScript設定
|
|
1675
|
-
"include": [
|
|
1676
|
-
コンポーネントはローカライズされたURLを持つ `<a>` 要素を返し、ロケールに応じたナビゲーションの一貫性を保証します。
|
|
1611
|
+
コンポーネントはローカライズされたURLを持つ`<a>`要素を返し、ナビゲーションがロケールに沿って一貫して行われることを保証します。
|
|
1677
1612
|
|
|
1678
|
-
|
|
1613
|
+
この`Link`コンポーネントをアプリケーション全体に統合することで、一貫性のある言語対応のユーザー体験を維持しつつ、SEOや使いやすさの向上も期待できます。
|
|
1679
1614
|
|
|
1680
|
-
### TypeScript
|
|
1615
|
+
### TypeScriptの設定
|
|
1681
1616
|
|
|
1682
|
-
Intlayer
|
|
1617
|
+
Intlayerはモジュール拡張を利用してTypeScriptの利点を活かし、コードベースをより堅牢にします。
|
|
1683
1618
|
|
|
1684
1619
|

|
|
1685
1620
|
|
|
1686
1621
|

|
|
1687
1622
|
|
|
1688
|
-
TypeScript
|
|
1623
|
+
TypeScriptの設定に自動生成された型を含めることを確認してください。
|
|
1689
1624
|
|
|
1690
1625
|
```json5 fileName="tsconfig.json"
|
|
1691
1626
|
{
|
|
1692
|
-
// ... 既存の
|
|
1627
|
+
// ... 既存のTypeScript設定
|
|
1693
1628
|
"include": [
|
|
1694
|
-
// ... 既存の
|
|
1629
|
+
// ... 既存のTypeScript設定
|
|
1695
1630
|
".intlayer/**/*.ts", // 自動生成された型を含める
|
|
1696
1631
|
],
|
|
1697
1632
|
}
|
|
1698
|
-
|
|
1633
|
+
```
|
|
1699
1634
|
|
|
1700
|
-
### Git
|
|
1635
|
+
### Gitの設定
|
|
1701
1636
|
|
|
1702
|
-
Intlayer
|
|
1637
|
+
Intlayerによって生成されたファイルはGitリポジトリにコミットしないように無視することを推奨します。
|
|
1703
1638
|
|
|
1704
|
-
これを行うには、`.gitignore
|
|
1639
|
+
これを行うには、`.gitignore`ファイルに以下の指示を追加してください。
|
|
1705
1640
|
|
|
1706
1641
|
```plaintext
|
|
1707
|
-
# Intlayer
|
|
1642
|
+
# Intlayerによって生成されたファイルを無視する
|
|
1708
1643
|
.intlayer
|
|
1709
1644
|
```
|
|
1710
1645
|
|
|
1711
|
-
### VS Code
|
|
1646
|
+
### VS Code拡張機能
|
|
1712
1647
|
|
|
1713
|
-
Intlayer
|
|
1648
|
+
Intlayerでの開発体験を向上させるために、公式の**Intlayer VS Code拡張機能**をインストールできます。
|
|
1714
1649
|
|
|
1715
|
-
[VS Code
|
|
1650
|
+
[VS Codeマーケットプレイスからインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1716
1651
|
|
|
1717
1652
|
この拡張機能は以下を提供します:
|
|
1718
1653
|
|
|
1719
|
-
-
|
|
1654
|
+
- 翻訳キーの**オートコンプリート**。
|
|
1720
1655
|
- **翻訳が不足している場合のリアルタイムエラー検出**。
|
|
1721
1656
|
- **翻訳内容のインラインプレビュー**。
|
|
1722
1657
|
- **翻訳の作成や更新を簡単に行うクイックアクション**。
|
|
@@ -1727,7 +1662,7 @@ Intlayer の開発体験を向上させるために、公式の **Intlayer VS Co
|
|
|
1727
1662
|
|
|
1728
1663
|
### さらに進むために
|
|
1729
1664
|
|
|
1730
|
-
|
|
1665
|
+
さらに進むには、[ビジュアルエディター](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)を実装するか、[CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md)を使用してコンテンツを外部化することができます。
|
|
1731
1666
|
|
|
1732
1667
|
---
|
|
1733
1668
|
|