# vue: SPA 翻訳を使った開発
URL: https://generaltranslation.com/ja/docs/vue/guides/developing-spa-translations.mdx
---
title: SPA 翻訳を使った開発
description: Vue SPA をプリロードし、モジュールスコープで t() を使って静的文字列を翻訳する方法。
related:
links:
- /docs/vue/guides/translating-strings
- /docs/vue/guides/managing-locales
- /docs/vue/guides/storing-translations
- /docs/vue/guides/configuring
---
ブラウザ専用のシングルページアプリでは、アプリケーションモジュールの実行前にアクティブなカタログをプリロードできます。これにより、定数やナビゲーション定義など、Vue コンポーネント外の文字列に対して、モジュールレベルで [`t()`](/docs/vue/reference/functions/t) を同期的に呼び出せます。
[`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa) は [`useGT()`](/docs/vue/reference/composables/use-gt) を補完するものであり、これに代わるものではありません。通常のコンポーネントコンテンツには composable を使用してください。また、リアクティブなロケール切り替えが必要な Vue アプリケーションやサーバーサイドレンダリングされたアプリケーションでも使用します。
## SPA ランタイムを選択する [#choose]
次のすべての条件に当てはまる場合にのみ、[`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa) を使用してください。
* アプリケーションが完全にブラウザ上で実行される。
* モジュールの評価時に文字列を翻訳する必要がある。
* ロケールの変更時にページを再読み込みしても問題ない。
アプリがサーバーでレンダリングされる場合、またはページを再読み込みせずにロケールをリアクティブに切り替える必要がある場合は、[`createGT()`](/docs/vue/reference/functions/create-gt) を使用してください。
## アプリをインポートする前にブートストラップする [#bootstrap]
初期化処理は、[`t()`](/docs/vue/reference/functions/t) を呼び出すモジュールより先に実行する必要があります。小規模な非同期ブートストラップであれば、標準の Vite 6 build ターゲットで動作し、トップレベルの `await` や `build.target: 'esnext'` は不要です。
### 1. マウント関数をエクスポートする
通常の Vite エントリモジュールを、初期化済みの [`GTPlugin`](/docs/vue/reference/types/gt-plugin) を受け取る関数をエクスポートするように変更します。
```ts title="src/main.ts"
import { createApp } from 'vue';
import type { GTPlugin } from 'gt-vue';
import App from './App.vue';
export function mount(gt: GTPlugin) {
createApp(App).use(gt).mount('#app');
}
```
### 2. 初期化して動的にインポートする
[`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa) の完了を待つブートストラップモジュールを作成します。その後、アプリケーションをインポートし、初期化で返されたプラグインそのものをインストールします。
```ts title="src/index.ts"
import { initializeGTSPA } from 'gt-vue';
import gtConfig from '../gt.config.json';
import loadTranslations from './loadTranslations';
async function bootstrap() {
const gt = await initializeGTSPA({
...gtConfig,
loadTranslations,
});
const { mount } = await import('./main');
mount(gt);
}
bootstrap().catch((error) => {
console.error('Failed to initialize translations', error);
});
```
最初の呼び出しがページ全体の SPA ランタイムを所有します。同時に行われた呼び出しは初期化を共有し、後続の呼び出しでは同じプラグインが返されます。マウント済みのアプリに対して [`createGT()`](/docs/vue/reference/functions/create-gt) を呼び出さないでください。呼び出すと、コンポーネントの参照とモジュールレベルの参照で異なる状態が使用されます。
### 3. Vite がブートストラップを読み込むようにする
`index.html` のモジュールスクリプトを更新し、`src/main.ts` ではなく `src/index.ts` を読み込むようにします。
```html title="index.html"
```
## モジュールレベルの文字列を翻訳する [#translate]
動的なアプリケーションインポートで読み込まれるモジュールでは、[`t()`](/docs/vue/reference/functions/t) を同期的に呼び出せます。
```ts title="src/navigation.ts"
import { t } from 'gt-vue';
export const message = t('Hello World');
export const navigation = [
{ label: t('Documentation', { $context: 'primary navigation' }), href: '/docs' },
{ label: t('Account settings'), href: '/settings' },
];
```
呼び出しでは静的なソース文字列を使用し、静的な`$context`を渡すこともできます。extractor がこれらの文字列を登録し、事前読み込み済みのカタログにより、モジュールの実行時に同期的に参照できます。
[`t()`](/docs/vue/reference/functions/t) はtagged templates、ICU構文、interpolation、`$format`、`$maxChars`をサポートしていません。Runtime値を含むcontentには、[``](/docs/vue/reference/components/var) と組み合わせて [``](/docs/vue/reference/components/t) を使用してください。
## 初期化済みの SPA でロケールを変更する [#locales]
`gt.config.json` の `defaultLocale` と `locales` を [`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa) に渡します。保存済みのロケールがサポートされていない場合、次回の初期化時にデフォルトロケールへフォールバックします。
[`useSetLocale()`](/docs/vue/reference/composables/use-set-locale) でロケールを変更すると、SPA ランタイムはロケール cookie を書き込み、ドキュメントを再読み込みします。再読み込みが完了するまで、現在のページは初期化時のロケールのまま維持されます。その後、モジュールレベルの呼び出しが再度実行される前に、ブートストラップが新しいカタログをプリロードします。
この再読み込みの仕組みにより、モジュールレベルの定数を安全に使用できます。ナビゲーションなしでロケールを変更する必要がある場合は、[`createGT()`](/docs/vue/reference/functions/create-gt) を使用し、代わりにテンプレートまたは算出プロパティから [`useGT()`](/docs/vue/reference/composables/use-gt) を呼び出してください。
## Next steps
- /docs/vue/guides/translating-strings
- /docs/vue/guides/managing-locales
- /docs/vue/guides/storing-translations
- /docs/vue/guides/configuring