po.js-i18n用の超シンプルなユーティリティ

Zend Frameworkでシステムを開発するときは、常にgettextとZend_Translateを使用します。 すべてが簡潔にシンプルであり、通常、大規模なプロジェクトの翻訳でも問題はありません。 各言語に対して、独自の.poおよび.moファイルが生成され、デフォルト言語から翻訳が踊り、キーも同じ言語になります。 翻訳者がこれらのファイルを転送すると便利です。POEditで開いて、すべてを簡単に翻訳できます。 サーバー側では、すべてが非常に単純ですが、多くの場合、JavaScriptでいくつかのメッセージを「オンザフライ」で翻訳する必要があり、彼は.moファイルを理解しません。 しかし、1つのプロジェクトの翻訳を2つの部分(バックエンド、フロントエンド)に分離しないように、それらを正確に使用したいと思います。 そして、私は検索し始めました。 インターネットにはこのようなソリューションがかなり多数ありますが、何らかの理由でそれらのすべてが依存関係で大きくなりすぎています。

code.google.com/p/gettext-js (プロトタイプ)
angular-gettext.rocketeer.be (Angular)
github.com/jakob-stoeck/jquery-gettext(jQuery

そして、まさに「pure-js」ソリューションが欲しかったのです。 OK、自分で書いてください。

私が最初に探していたのは、JSでPOファイルを読み取る方法でした。 解析できますが、これは余分な負荷であるため、JavaScriptを強制せずに既成のJSONを提供することにしました。 したがって、最初に行う必要があるのは、POをJSONに変換することです。 このコンバータを使用することをお勧めします。

さらに、アルゴリズムはシンプルで、JSONファイルをサーバーに保存し、pojsでそのファイルへのリンクを転送します。 もちろん、このpo.min.jsの前にページに接続します。

<script src="po.min.js"></script> <script> pojs.init('/ru.json'); </script> 


現在の言語がデフォルトの場合、JSONへのリンクを渡す必要はありません。

すべての転送は、キーが渡された関数呼び出しの後に返されます。 キーが見つからない場合、キー自体が返されます。

 pojs._('Hello world'); 


また、po.jsには、sprintfに少し似た別の超小型機能があります。

 pojs._('My name is %s, and I am %s years old', ['Sasha', 24]); 


JSONがキャッシュされていない場合、非同期で受信されます。つまり、初期化の直後にpojs ._()を使用することはできません。 翻訳が使用される場所でコードをラップします。

 pojs.ready(function() { pojs._('Hello world'); }); 


po.jsのいくつかの利点に注目する価値があります。そうしないと、これらすべてを実行しても意味がありません。

1.ナノサイズ:〜0.7KB
2. jQuery、Prototype、Angularなどのサードパーティの依存関係は必要ありません...
3. JSONはlocalStorageにキャッシュされます。 したがって、翻訳ファイルが非常に大きい場合は注意してください。 JSONファイルへのリンクに「?1」を追加するだけでキャッシュをリセットできます(はい、そのような古い学校)

githubのpo.js

PS
私は純粋に私のニーズのために書いた、多分あなたは何かを逃しているか、何かが正常に動作していません。 ルールを整える、改善する!

Source: https://habr.com/ru/post/J229495/


All Articles