使い方
このライブラリのAPIは多くの部分を先行する svelte-intl を参考にしており、ユーティリティ関数のインポート先を変えるだけで、アプリケーションのコードに触れることなく svelte-i18 と svelte-intl-precompile とを切り替えられるほどになっています。
ストア指向のAPIはテンプレート内で特に使いやすいことに加え、ユーザが別のロケールを洗濯したり翻訳がロードされたら自動的に更新され、アプリケーション全体がリアクティブになるという追加の利点があります。本項で見る例は、いずれも次のような翻訳を含むアプリケーションに記述することを想定しています。
{
"page.title": "Svelte Intl Precompile Docs",
"login-success-msg": "Welcome back, {name}",
"transfer-received": "You received {amount, number, currency} at {wireDate, time, short} on {wireDate, date, long}"
}
基本的な翻訳: $t(key, ops)
ストア
最も頻繁に使うストアです。インポートして、翻訳のキーを渡す関数として使ってください。
<script>
import { t } from 'svelte-intl-precompile'
</script>
<h1>{$t('page.title')}</h1>
引数を渡す
The second argument received by the $t()
が受け取る2つ目の引数はオブジェクトです。翻訳の中で使われる引数はすべて values
を通じて渡されます。
<h1>{$t('login-success-msg', { values: { name: user.name } })}</h1>
パラメータが単に挿入されるだけの場合でも、複数形や選択ヘルパーの場合でも、数値・日付・時間としてフォーマットされる場合でも違いはありません。引数は全て同じ方法で渡されます。
<h1>{$t('transfer-received', { values: { amount: 123.45 , wireDate: transfer.date } })}</h1>
日付・時間・数値をフォーマットする
数値・日付・時間を渡して渡して設定に合わせてフォーマットすることもできますが、 JavaScript のコードから直接フォーマットする便利なストアも提供しています。
<script>
import { date, number, time, init } from 'svelte-intl-precompile';
// Adding a custom formatter for Euro as it's not among the defaults.
init({
formats: {
number: {
EUR: { style: 'currency', currency: 'EUR' },
}
}
});
// ...
$: {
jqueryPlugin.magic({
dateString: $date(d, { format: 'short' }),
timeString: $time(t, { format: 'full' }),
priceString: $number(n, { format: 'EUR' })
})
}
</script>
その他のストア
他にも、言及に値する3つのストアがあります:
$locale
- 現在の言語設定を読み取り・書き込みすることができます(例:
"es-ES"
)。 $locales
- 利用可能なすべてのロケールを含む配列を返します(例:
["es-ES", "en", "pt-BR"]
)。 $isLoading
- いずれかのロケールの非同期読み込みがまだ完了していない場合に
true
を返します。
現在の言語設定を変更するコンポーネントを作ってみましょう。
<script>
import { t, locale, locales } from 'svelte-intl-precompile';
</script>
{#each $locales as loc}
<button
type="button"
class={loc === $locale && 'current'}
on:click={() => $locale = loc}>{loc}</button>
{/each}
前記のコードは直感的です。単に $locales
に含まれる利用可能なロケールのリストを順番に処理して、それぞれに対応するボタンを表示しています。ボタンをクリックすると、 $locale
に格納されている現在の言語設定を新しい値に書き換えます。
ページをリロードしなくても、アプリ内の全ての翻訳が更新されます。