イントロダクション

なぜ使用したいのですか?

Svelte-intl-precompile は Svelte アプリのための i18n ライブラリで、アプリが必要とする機能を、アプリのサイズと実行パフォーマンスのどちらに対しても最低限のコストで提供することを目的しています。

これを実現するのに、他の多くの国際化ライブラリとは異なるアプローチをとっています。Svelte.js がコードを解析・解釈してビルド時に最小かつ効率的な javascript にコンパイルするのと同じように、このライブラリは ICU メッセージ構文 で定義された翻訳文を検査し、小さくて効率的なインライン関数にコンパイルします。

ICU メッセージ構文でサポートされている全ての機能を使用した場合、minify と 圧縮を行ったあとで約2kbとなります。もしいくつかの機能しか使わないのであれば、1kb程度まで小さくすることができます。

また、翻訳文をブラウザ上でパースしたりトーカナイズしたりする必要がないため、高速です。翻訳文のレンダリングは、初回の場合は約4倍高速で、2回目以降は約50%高速です。

なんだって?コードを見せてください

こちらです、試してみてください。ご自身で翻訳文を貼り付けて、変換された出力を見てみましょう。

{
  "header": "Svelte Intl Precompile is {adjective}",
  "posted-on": "Posted on {postDate, date, long}",
  "invite-friend": "{name} has joined Svelte! Give {gender, select, male {him} female {her} other {your friend}} a warm welcome!",
  "friends-msg": "You have {count, plural, zero {no friend} one {just # friend} other {# friends}}",
  "show-friend-profile": "Click to show {gender, select, male {his profile} female {her profile} other {the profile}}"
}
458 bytes
		
0 bytes (100% smaller than the source translations)

どんな機能がありますか?

ICU メッセージ構文でサポートされているすべての機能をサポートしています。
Svelte.js 向けの国際化ライブラリで、非常にポピュラーでとても上手く設計されている svelte-i18n とほぼ完全に互換性のある API があります。

主要な機能は以下の通りです:

  • 補間、副翻訳選択、すべての ICU の機能を備えた翻訳。
  • 日付、時刻、数字、序数、通貨のフォーマッターはモダンなブラウザと node で利用可能なネイティブの Intl API を活用。
  • store を使用し、ロケールや翻訳が変更されたときに自動的に更新される、とても使いやすい Svelte 指向の API。
  • 必要に応じて非同期でロケールをロードする、SSR モードのときにリクエストヘッダからデフォルトのロケールを抽出する、などが行える様々な関数。
  • 使用していない機能はすべて tree-shaking される。