@intlayer/docs 7.1.9 → 7.2.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.
- package/README.md +1 -0
- package/dist/cjs/generated/docs.entry.cjs +19 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +19 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_svelte_kit.md +730 -0
- package/docs/ar/intlayer_with_vite+svelte.md +288 -104
- package/docs/de/intlayer_with_svelte_kit.md +730 -0
- package/docs/de/intlayer_with_vite+svelte.md +302 -101
- package/docs/en/intlayer_with_svelte_kit.md +560 -0
- package/docs/en/intlayer_with_vite+svelte.md +22 -6
- package/docs/en/introduction.md +2 -0
- package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
- package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
- package/docs/es/intlayer_with_svelte_kit.md +730 -0
- package/docs/es/intlayer_with_vite+svelte.md +300 -107
- package/docs/fr/intlayer_with_svelte_kit.md +762 -0
- package/docs/fr/intlayer_with_vite+svelte.md +297 -101
- package/docs/hi/intlayer_with_svelte_kit.md +730 -0
- package/docs/hi/intlayer_with_vite+svelte.md +298 -108
- package/docs/id/intlayer_with_svelte_kit.md +730 -0
- package/docs/id/intlayer_with_vite+svelte.md +277 -99
- package/docs/it/intlayer_with_svelte_kit.md +762 -0
- package/docs/it/intlayer_with_vite+svelte.md +275 -99
- package/docs/ja/intlayer_with_svelte_kit.md +730 -0
- package/docs/ja/intlayer_with_vite+svelte.md +295 -110
- package/docs/ko/intlayer_with_svelte_kit.md +730 -0
- package/docs/ko/intlayer_with_vite+svelte.md +286 -199
- package/docs/pl/intlayer_with_svelte_kit.md +732 -0
- package/docs/pl/intlayer_with_vite+svelte.md +273 -101
- package/docs/pt/intlayer_with_svelte_kit.md +764 -0
- package/docs/pt/intlayer_with_vite+svelte.md +290 -96
- package/docs/ru/intlayer_with_svelte_kit.md +730 -0
- package/docs/ru/intlayer_with_vite+svelte.md +275 -99
- package/docs/tr/intlayer_with_svelte_kit.md +730 -0
- package/docs/tr/intlayer_with_vite+svelte.md +297 -119
- package/docs/vi/intlayer_with_svelte_kit.md +730 -0
- package/docs/vi/intlayer_with_vite+svelte.md +275 -102
- package/docs/zh/intlayer_with_svelte_kit.md +730 -0
- package/docs/zh/intlayer_with_vite+svelte.md +309 -107
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +19 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Vite
|
|
5
|
-
description: Vite と Svelte のウェブサイトを多言語対応にする方法を紹介します。国際化(i18n
|
|
3
|
+
updatedAt: 2025-11-19
|
|
4
|
+
title: Vite と Svelte アプリの翻訳方法 – i18n ガイド 2025
|
|
5
|
+
description: Vite と Svelte のウェブサイトを多言語対応にする方法を紹介します。国際化(i18n)と翻訳のドキュメントに従ってください。
|
|
6
6
|
keywords:
|
|
7
7
|
- 国際化
|
|
8
8
|
- ドキュメント
|
|
@@ -14,35 +14,48 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- environment
|
|
16
16
|
- vite-and-svelte
|
|
17
|
-
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
|
|
18
18
|
history:
|
|
19
|
+
- version: 5.5.11
|
|
20
|
+
date: 2025-11-19
|
|
21
|
+
changes: ドキュメント更新
|
|
19
22
|
- version: 5.5.10
|
|
20
23
|
date: 2025-06-29
|
|
21
|
-
changes:
|
|
24
|
+
changes: 履歴初期化
|
|
22
25
|
---
|
|
23
26
|
|
|
24
|
-
# Intlayer
|
|
27
|
+
# Intlayer を使って Vite と Svelte のウェブサイトを翻訳する | 国際化(i18n)
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
## 目次
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
<TOC/>
|
|
29
32
|
|
|
30
33
|
## Intlayerとは?
|
|
31
34
|
|
|
32
35
|
**Intlayer**は、最新のウェブアプリケーションにおける多言語対応を簡素化するために設計された革新的なオープンソースの国際化(i18n)ライブラリです。
|
|
33
36
|
|
|
34
|
-
Intlayer
|
|
37
|
+
Intlayerを使うことで、以下が可能になります:
|
|
35
38
|
|
|
36
39
|
- **コンポーネントレベルで宣言的な辞書を使い、翻訳を簡単に管理**できます。
|
|
37
40
|
- **メタデータ、ルート、コンテンツを動的にローカライズ**できます。
|
|
38
|
-
-
|
|
39
|
-
-
|
|
41
|
+
- **自動生成される型によりTypeScriptのサポートを確保し、オートコンプリートやエラー検出を向上**させます。
|
|
42
|
+
- **動的なロケール検出や切り替えなどの高度な機能**を利用できます。
|
|
40
43
|
|
|
41
44
|
---
|
|
42
45
|
|
|
43
46
|
## ViteとSvelteアプリケーションでIntlayerをセットアップするステップバイステップガイド
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
50
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
51
|
+
title="Demo CodeSandbox - Intlayerを使ったアプリケーションの国際化方法"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
GitHubの[アプリケーションテンプレート](https://github.com/aymericzip/intlayer-vite-svelte-template)を参照してください。
|
|
57
|
+
|
|
58
|
+
### ステップ1: 依存関係のインストール
|
|
46
59
|
|
|
47
60
|
npmを使って必要なパッケージをインストールします:
|
|
48
61
|
|
|
@@ -61,25 +74,26 @@ yarn add intlayer svelte-intlayer
|
|
|
61
74
|
yarn add vite-intlayer --save-dev
|
|
62
75
|
```
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
```bash packageManager="bun"
|
|
78
|
+
bun add intlayer svelte-intlayer
|
|
79
|
+
bun add vite-intlayer --save-dev
|
|
80
|
+
```
|
|
65
81
|
|
|
66
82
|
- **intlayer**
|
|
67
83
|
|
|
68
|
-
設定管理、翻訳、[コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/
|
|
84
|
+
設定管理、翻訳、[コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)、トランスパイル、および[CLIコマンド](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_cli.md)のための国際化ツールを提供するコアパッケージ。
|
|
69
85
|
|
|
70
86
|
- **svelte-intlayer**
|
|
71
|
-
|
|
72
87
|
IntlayerをSvelteアプリケーションと統合するパッケージです。Svelteの国際化のためのコンテキストプロバイダーとフックを提供します。
|
|
73
88
|
|
|
74
89
|
- **vite-intlayer**
|
|
75
|
-
|
|
76
90
|
Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグイン、およびユーザーの優先ロケール検出、クッキー管理、URLリダイレクト処理のためのミドルウェアを含みます。
|
|
77
91
|
|
|
78
|
-
### ステップ
|
|
92
|
+
### ステップ2: プロジェクトの設定
|
|
79
93
|
|
|
80
94
|
アプリケーションの言語を設定するための設定ファイルを作成します:
|
|
81
95
|
|
|
82
|
-
```typescript fileName="intlayer.config.ts"
|
|
96
|
+
```typescript fileName="intlayer.config.ts"
|
|
83
97
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
84
98
|
|
|
85
99
|
const config: IntlayerConfig = {
|
|
@@ -97,51 +111,13 @@ const config: IntlayerConfig = {
|
|
|
97
111
|
export default config;
|
|
98
112
|
```
|
|
99
113
|
|
|
100
|
-
|
|
101
|
-
import { Locales } from "intlayer";
|
|
102
|
-
|
|
103
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
104
|
-
const config = {
|
|
105
|
-
internationalization: {
|
|
106
|
-
locales: [
|
|
107
|
-
Locales.ENGLISH,
|
|
108
|
-
Locales.FRENCH,
|
|
109
|
-
Locales.SPANISH,
|
|
110
|
-
// 他のロケール
|
|
111
|
-
],
|
|
112
|
-
defaultLocale: Locales.ENGLISH,
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export default config;
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
120
|
-
const { Locales } = require("intlayer");
|
|
121
|
-
|
|
122
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
123
|
-
const config = {
|
|
124
|
-
internationalization: {
|
|
125
|
-
locales: [
|
|
126
|
-
Locales.ENGLISH,
|
|
127
|
-
Locales.FRENCH,
|
|
128
|
-
Locales.SPANISH,
|
|
129
|
-
// 他のロケール
|
|
130
|
-
],
|
|
131
|
-
defaultLocale: Locales.ENGLISH,
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
module.exports = config;
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
> この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所や拡張子、コンソール上のIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
|
|
114
|
+
> この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
|
|
139
115
|
|
|
140
116
|
### ステップ3: Vite設定にIntlayerを統合する
|
|
141
117
|
|
|
142
|
-
|
|
118
|
+
intlayerプラグインを設定に追加します。
|
|
143
119
|
|
|
144
|
-
```typescript fileName="vite.config.ts"
|
|
120
|
+
```typescript fileName="vite.config.ts"
|
|
145
121
|
import { defineConfig } from "vite";
|
|
146
122
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
147
123
|
import { intlayer } from "vite-intlayer";
|
|
@@ -152,33 +128,11 @@ export default defineConfig({
|
|
|
152
128
|
});
|
|
153
129
|
```
|
|
154
130
|
|
|
155
|
-
|
|
156
|
-
import { defineConfig } from "vite";
|
|
157
|
-
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
158
|
-
import { intlayer } from "vite-intlayer";
|
|
159
|
-
|
|
160
|
-
// https://vitejs.dev/config/
|
|
161
|
-
export default defineConfig({
|
|
162
|
-
plugins: [svelte(), intlayer()],
|
|
163
|
-
});
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
```javascript fileName="vite.config.cjs" codeFormat="commonjs"
|
|
167
|
-
const { defineConfig } = require("vite");
|
|
168
|
-
const react = require("@vitejs/plugin-react-swc");
|
|
169
|
-
const { intlayer } = require("vite-intlayer");
|
|
131
|
+
> `intlayer()` Viteプラグインは、IntlayerをViteに統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードでの監視が行われます。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンス最適化のためのエイリアスも提供します。
|
|
170
132
|
|
|
171
|
-
|
|
172
|
-
module.exports = defineConfig({
|
|
173
|
-
plugins: [react(), intlayer()],
|
|
174
|
-
});
|
|
175
|
-
```
|
|
133
|
+
### ステップ4: コンテンツの宣言
|
|
176
134
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
### ステップ4: コンテンツを宣言する
|
|
180
|
-
|
|
181
|
-
翻訳を格納するためのコンテンツ宣言を作成および管理します:
|
|
135
|
+
翻訳を格納するためのコンテンツ宣言を作成および管理します。
|
|
182
136
|
|
|
183
137
|
```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
|
|
184
138
|
import { t, type Dictionary } from "intlayer";
|
|
@@ -201,6 +155,7 @@ export default appContent;
|
|
|
201
155
|
import { t } from "intlayer";
|
|
202
156
|
|
|
203
157
|
/** @type {import('intlayer').Dictionary} */
|
|
158
|
+
// アプリケーションのコンテンツ宣言
|
|
204
159
|
const appContent = {
|
|
205
160
|
key: "app",
|
|
206
161
|
content: {
|
|
@@ -251,39 +206,271 @@ module.exports = appContent;
|
|
|
251
206
|
}
|
|
252
207
|
```
|
|
253
208
|
|
|
254
|
-
>
|
|
209
|
+
> コンテンツ宣言は、アプリケーション内のどこにでも定義できます。`contentDir`ディレクトリ(デフォルトは`./src`)に含まれていれば有効です。また、コンテンツ宣言ファイルの拡張子(デフォルトは`.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)に一致する必要があります。
|
|
255
210
|
|
|
256
|
-
> 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/
|
|
211
|
+
> 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
|
|
257
212
|
|
|
258
213
|
### ステップ5: コード内でIntlayerを利用する
|
|
259
214
|
|
|
260
|
-
|
|
215
|
+
```svelte fileName="src/App.svelte"
|
|
216
|
+
<script>
|
|
217
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
218
|
+
|
|
219
|
+
const content = useIntlayer("app");
|
|
220
|
+
</script>
|
|
221
|
+
|
|
222
|
+
<div>
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
<!-- コンテンツをシンプルにレンダリング -->
|
|
226
|
+
<h1>{$content.title}</h1>
|
|
227
|
+
<!-- エディターを使って編集可能なコンテンツとしてレンダリング -->
|
|
228
|
+
<h1><svelte:component this={$content.title} /></h1>
|
|
229
|
+
<!-- コンテンツを文字列としてレンダリング -->
|
|
230
|
+
<div aria-label={$content.title.value}></div>
|
|
231
|
+
```
|
|
261
232
|
|
|
262
233
|
### (オプション)ステップ6: コンテンツの言語を変更する
|
|
263
234
|
|
|
264
|
-
|
|
235
|
+
```svelte fileName="src/App.svelte"
|
|
236
|
+
<script lang="ts">
|
|
237
|
+
import { getLocaleName } from 'intlayer';
|
|
238
|
+
import { useLocale } from 'svelte-intlayer';
|
|
265
239
|
|
|
266
|
-
|
|
240
|
+
// ロケール情報と setLocale 関数を取得
|
|
241
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
267
242
|
|
|
268
|
-
|
|
243
|
+
// ロケール変更を処理
|
|
244
|
+
const changeLocale = (event: Event) => {
|
|
245
|
+
const target = event.target as HTMLSelectElement;
|
|
246
|
+
const newLocale = target.value;
|
|
247
|
+
setLocale(newLocale);
|
|
248
|
+
};
|
|
249
|
+
</script>
|
|
250
|
+
|
|
251
|
+
<div>
|
|
252
|
+
<select value={$locale} on:change={changeLocale}>
|
|
253
|
+
{#each availableLocales ?? [] as loc}
|
|
254
|
+
<option value={loc}>
|
|
255
|
+
{getLocaleName(loc)}
|
|
256
|
+
</option>
|
|
257
|
+
{/each}
|
|
258
|
+
</select>
|
|
259
|
+
</div>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### (オプション)ステップ7:Markdownのレンダリング
|
|
269
263
|
|
|
270
|
-
|
|
264
|
+
Intlayerは、Markdownコンテンツを直接Svelteアプリケーション内でレンダリングすることをサポートしています。デフォルトでは、Markdownはプレーンテキストとして扱われます。MarkdownをリッチなHTMLに変換するには、`@humanspeak/svelte-markdown`や他のMarkdownパーサーを統合することができます。
|
|
271
265
|
|
|
272
|
-
[
|
|
266
|
+
> `intlayer`パッケージを使ってMarkdownコンテンツを宣言する方法については、[markdownドキュメント](https://github.com/aymericzip/intlayer/tree/main/docs/docs/ja/dictionary/markdown.md)をご覧ください。
|
|
273
267
|
|
|
274
|
-
|
|
268
|
+
```svelte fileName="src/App.svelte"
|
|
269
|
+
<script>
|
|
270
|
+
import { setIntlayerMarkdown } from "svelte-intlayer";
|
|
275
271
|
|
|
276
|
-
|
|
272
|
+
setIntlayerMarkdown((markdown) =>
|
|
273
|
+
// マークダウンコンテンツを文字列としてレンダリングする
|
|
274
|
+
return markdown;
|
|
275
|
+
);
|
|
276
|
+
</script>
|
|
277
|
+
|
|
278
|
+
<h1>{$content.markdownContent}</h1>
|
|
279
|
+
```
|
|
277
280
|
|
|
278
|
-
|
|
281
|
+
> `content.markdownContent.metadata.xxx` プロパティを使って、マークダウンのフロントマターのデータにもアクセスできます。
|
|
279
282
|
|
|
280
|
-
|
|
283
|
+
### (オプション)ステップ8: intlayerエディター / CMS のセットアップ
|
|
281
284
|
|
|
282
|
-
|
|
285
|
+
intlayerエディターをセットアップするには、[intlayerエディターのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)に従ってください。
|
|
283
286
|
|
|
284
|
-
|
|
287
|
+
intlayer CMSをセットアップするには、[intlayer CMSのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md)に従ってください。
|
|
285
288
|
|
|
286
|
-
|
|
289
|
+
並行して、Svelteアプリケーション内では、レイアウトまたはアプリケーションのルートに以下の行を追加する必要があります。
|
|
290
|
+
|
|
291
|
+
```svelte fileName="src/layout.svelte"
|
|
292
|
+
import { useIntlayerEditor } from "svelte-intlayer";
|
|
293
|
+
|
|
294
|
+
useIntlayerEditor();
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### (オプション)ステップ7:アプリケーションにローカライズされたルーティングを追加する
|
|
298
|
+
|
|
299
|
+
Svelteアプリケーションでローカライズされたルーティングを扱うには、`svelte-spa-router`とIntlayerの`localeFlatMap`を組み合わせて、各ロケールのルートを生成できます。
|
|
300
|
+
|
|
301
|
+
まず、`svelte-spa-router`をインストールします:
|
|
302
|
+
|
|
303
|
+
```bash packageManager="npm"
|
|
304
|
+
npm install svelte-spa-router
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```bash packageManager="pnpm"
|
|
308
|
+
pnpm add svelte-spa-router
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
```bash packageManager="yarn"
|
|
312
|
+
yarn add svelte-spa-router
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
```bash packageManager="bun"
|
|
316
|
+
bun add svelte-spa-router
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
次に、ルートを定義するために `Router.svelte` ファイルを作成します:
|
|
320
|
+
|
|
321
|
+
```svelte fileName="src/Router.svelte"
|
|
322
|
+
<script lang="ts">
|
|
323
|
+
import { localeFlatMap } from "intlayer";
|
|
324
|
+
import Router from "svelte-spa-router";
|
|
325
|
+
import { wrap } from "svelte-spa-router/wrap";
|
|
326
|
+
import App from "./App.svelte";
|
|
327
|
+
|
|
328
|
+
const routes = Object.fromEntries(
|
|
329
|
+
localeFlatMap(({locale, urlPrefix}) => [
|
|
330
|
+
[
|
|
331
|
+
urlPrefix || '/',
|
|
332
|
+
wrap({
|
|
333
|
+
component: App as any,
|
|
334
|
+
props: {
|
|
335
|
+
locale,
|
|
336
|
+
},
|
|
337
|
+
}),
|
|
338
|
+
],
|
|
339
|
+
])
|
|
340
|
+
);
|
|
341
|
+
</script>
|
|
342
|
+
|
|
343
|
+
<Router {routes} />
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
`main.ts` を更新して、`App` の代わりに `Router` コンポーネントをマウントします:
|
|
347
|
+
|
|
348
|
+
```typescript fileName="src/main.ts"
|
|
349
|
+
import { mount } from "svelte";
|
|
350
|
+
import Router from "./Router.svelte";
|
|
351
|
+
|
|
352
|
+
const app = mount(Router, {
|
|
353
|
+
typescript fileName="src/main.ts"
|
|
354
|
+
import { mount } from "svelte";
|
|
355
|
+
import Router from "./Router.svelte";
|
|
356
|
+
|
|
357
|
+
const app = mount(Router, {
|
|
358
|
+
target: document.getElementById("app")!, // アプリのマウント先のDOM要素
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
export default app;
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
最後に、`App.svelte` を更新して `locale` プロパティを受け取り、`useIntlayer` と共に使用します:
|
|
365
|
+
|
|
366
|
+
```svelte fileName="src/App.svelte"
|
|
367
|
+
<script lang="ts">
|
|
368
|
+
import type { Locale } from 'intlayer';
|
|
369
|
+
import { useIntlayer } from 'svelte-intlayer';
|
|
370
|
+
import Counter from './lib/Counter.svelte';
|
|
371
|
+
import LocaleSwitcher from './lib/LocaleSwitcher.svelte';
|
|
372
|
+
|
|
373
|
+
export let locale: Locale; // ロケールを受け取る
|
|
374
|
+
|
|
375
|
+
$: content = useIntlayer('app', locale); // ロケールに基づくコンテンツを取得
|
|
376
|
+
</script>
|
|
377
|
+
|
|
378
|
+
<main>
|
|
379
|
+
<div class="locale-switcher-container">
|
|
380
|
+
<LocaleSwitcher currentLocale={locale} /> <!-- 現在のロケールを渡す -->
|
|
381
|
+
</div>
|
|
382
|
+
|
|
383
|
+
<!-- ... アプリの残りの部分 ... -->
|
|
384
|
+
</main>
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
#### サーバーサイドルーティングの設定(オプション)
|
|
388
|
+
|
|
389
|
+
並行して、`intlayerProxy` を使用してアプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインは、URL に基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最適なロケールを判断します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
|
|
390
|
+
|
|
391
|
+
> `intlayerProxy` を本番環境で使用するには、`vite-intlayer` パッケージを `devDependencies` から `dependencies` に切り替える必要があることに注意してください。
|
|
392
|
+
|
|
393
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
394
|
+
import { defineConfig } from "vite";
|
|
395
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
396
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
397
|
+
|
|
398
|
+
typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
399
|
+
import { defineConfig } from "vite";
|
|
400
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
401
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
402
|
+
|
|
403
|
+
// https://vitejs.dev/config/
|
|
404
|
+
export default defineConfig({
|
|
405
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
406
|
+
});
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
410
|
+
import { defineConfig } from "vite";
|
|
411
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
412
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
413
|
+
|
|
414
|
+
// https://vitejs.dev/config/
|
|
415
|
+
export default defineConfig({
|
|
416
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
417
|
+
});
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
421
|
+
const { defineConfig } = require("vite");
|
|
422
|
+
const { svelte } = require("@sveltejs/vite-plugin-svelte");
|
|
423
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
424
|
+
|
|
425
|
+
// https://vitejs.dev/config/
|
|
426
|
+
module.exports = defineConfig({
|
|
427
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
428
|
+
});
|
|
429
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### (オプション)ステップ8:ロケールが変更されたときにURLを変更する
|
|
434
|
+
|
|
435
|
+
ユーザーが言語を切り替え、URLをそれに応じて更新できるようにするために、`LocaleSwitcher` コンポーネントを作成できます。このコンポーネントは `intlayer` の `getLocalizedUrl` と `svelte-spa-router` の `push` を使用します。
|
|
436
|
+
|
|
437
|
+
```svelte fileName="src/lib/LocaleSwitcher.svelte"
|
|
438
|
+
<script lang="ts">
|
|
439
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
440
|
+
import { useLocale } from "svelte-intlayer";
|
|
441
|
+
import { push } from "svelte-spa-router";
|
|
442
|
+
|
|
443
|
+
export let currentLocale: string | undefined = undefined;
|
|
444
|
+
|
|
445
|
+
// ロケール情報を取得
|
|
446
|
+
const { locale, availableLocales } = useLocale();
|
|
447
|
+
|
|
448
|
+
// ロケール変更を処理
|
|
449
|
+
const changeLocale = (event: Event) => {
|
|
450
|
+
const target = event.target as HTMLSelectElement;
|
|
451
|
+
const newLocale = target.value;
|
|
452
|
+
const currentUrl = window.location.pathname;
|
|
453
|
+
const url = getLocalizedUrl( currentUrl, newLocale);
|
|
454
|
+
push(url);
|
|
455
|
+
};
|
|
456
|
+
</script>
|
|
457
|
+
|
|
458
|
+
<div class="locale-switcher">
|
|
459
|
+
<select value={currentLocale ?? $locale} onchange={changeLocale}>
|
|
460
|
+
{#each availableLocales ?? [] as loc}
|
|
461
|
+
<option value={loc}>
|
|
462
|
+
{getLocaleName(loc)}
|
|
463
|
+
</option>
|
|
464
|
+
{/each}
|
|
465
|
+
</select>
|
|
466
|
+
</div>
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### Git 設定
|
|
470
|
+
|
|
471
|
+
Intlayer によって生成されたファイルは無視することを推奨します。これにより、Git リポジトリへの不要なコミットを避けることができます。
|
|
472
|
+
|
|
473
|
+
これを行うには、`.gitignore` ファイルに以下の指示を追加してください:
|
|
287
474
|
|
|
288
475
|
```plaintext
|
|
289
476
|
# Intlayer によって生成されたファイルを無視する
|
|
@@ -292,23 +479,21 @@ Intlayerによって生成されたファイルは無視することを推奨し
|
|
|
292
479
|
|
|
293
480
|
### VS Code 拡張機能
|
|
294
481
|
|
|
295
|
-
Intlayer
|
|
482
|
+
Intlayerでの開発体験を向上させるために、公式の**Intlayer VS Code拡張機能**をインストールできます。
|
|
296
483
|
|
|
297
|
-
[VS Code
|
|
484
|
+
[VS Codeマーケットプレイスからインストール](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
298
485
|
|
|
299
486
|
この拡張機能は以下を提供します:
|
|
300
487
|
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
-
|
|
488
|
+
- 翻訳キーの**オートコンプリート**。
|
|
489
|
+
- 欠落している翻訳の**リアルタイムエラー検出**。
|
|
490
|
+
- 翻訳されたコンテンツの**インラインプレビュー**。
|
|
491
|
+
- 翻訳を簡単に作成・更新できる**クイックアクション**。
|
|
305
492
|
|
|
306
|
-
拡張機能の使い方の詳細については、[Intlayer VS Code
|
|
493
|
+
拡張機能の使い方の詳細については、[Intlayer VS Code拡張機能のドキュメント](https://intlayer.org/doc/vs-code-extension)を参照してください。
|
|
307
494
|
|
|
308
495
|
---
|
|
309
496
|
|
|
310
|
-
###
|
|
497
|
+
### さらに進む
|
|
311
498
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
---
|
|
499
|
+
さらに進めるために、[ビジュアルエディター](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)を使用してコンテンツを外部化することができます。
|