サイクルのすべての記事:
- 「 Node.jsでのメモリリークのハンティング 」
- 「 ノードを眼球にロードします 」
- 「 アプリケーションのスケーリングを簡素化するために、クライアントにセッションを保存します 」
- 「 フロントエンドのパフォーマンス。パート1-連結、圧縮、キャッシング 」
- 「 負荷がかかってもクラッシュしないサーバーを作成しています 」
- 「 フロントエンドのパフォーマンス。パート2-etagifyを使用した動的コンテンツのキャッシュ 」
- 「 node-convictを使用したWebアプリケーション構成の調整 」
- 「 フロントエンドのパフォーマンス。パート3-フォントの最適化 」
- 「 Node.jsアプリケーションのローカライズパート1 」
- 「 Node.jsアプリケーションのローカライズパート2:ツールキットとプロセス 」
- 「 Node.jsアプリケーションのローカライズパート3:アクションのローカライズ 」
- 「 Awsbox-Amazon CloudにNode.jsアプリケーションをデプロイするためのPaaSインフラストラクチャ 」
Mozilla製品とサービスが90言語にローカライズされていることをご存知ですか? ローカライズには以下が含まれます:
- 地域のバリエーションや言語の方言に翻訳されたテキスト。
- 右から左へのスペルを考慮したページのレンダリング。
- 任意の長さのテキストに対応できる防弾設計。
- ローカルオーディエンス向けに調整されたヘッダー、タグ、およびボタンテキスト。
ローカライズに関する3つの記事のこのシリーズでは、多言語Node.jsを作成する技術的な側面について説明します。
一般的に受け入れられている「国際化」(i18n)と「ローカリゼーション」(l10n)という用語を使用します。 国際化は、後続のローカライズ、つまり特定の言語の実際の翻訳と適応を可能にする一連の技術です。
Mozilla Personaは、多くのロケールにローカライズされたNode.js Webサービスです。 私たちのチームには非常に具体的なリクエストがあったため、既存のライブラリをローカライズに使用しませんでした。
私たちの目標
次の目標を達成するために、いくつかのモジュールを作成しました。
- 既存のMozillaローカライザーおよび翻訳者コミュニティへの良好な統合。
- すべてのツールは純粋なJavaScriptで動作します。
作成したモジュールは次のとおりです。
- 国際化
- jsxgettext
- po2json.js
- ぐちゃぐちゃ
i18n-abideは、アプリケーションに翻訳を含めるために使用されるメインモジュールです。 最初にそれを理解しましょう。 例では、上記のアプリケーションがExpressおよびEJSテンプレートを使用していると想定しています。
インストールと準備
npm経由のi18n-abideインストール:
npm install i18n-abide
次の行をアプリケーションコードに含める必要があります。
var i18n = require('i18n-abide'); app.use(i18n.abide({ supported_languages: ['en-US', 'de', 'es', 'zh-TW'], default_lang: 'en-US', translation_directory: 'static/i18n' }));
ローカライズシリーズの3番目の記事でモジュール構成パラメーターを検討します。 i18n-abideは、翻訳に必要ないくつかの機能を提供します。 これらは、要求処理中およびテンプレートで
req
オブジェクトで使用できます。
次のステップは、アプリケーションコードを調べて、ユーザーにテキストが表示されるすべての場所を見つけることです。 その後、テンプレートは次のようになります。
<title></title>
追加する主な機能は
gettext()
です。 さらに、変数
lang
および
lang_dir
ます。
-
lang
は、ブラウザの設定とユーザー設定に基づく言語コードです。 -
lang_dir
テキストの方向。左から右(ltr
)または右から左(rtl
)。 -
gettext
は、英語の文字列を受け取り、翻訳を返す関数です。
文字列について話すとき、JavaScript文字列ではなく
gettext
文字列を意味することに注意してください。 これらはテキストの断片であり、ラベル、段落、インターフェース要素がユーザーに表示されます。 コードの一部の行がユーザーの目を意図していない場合、
gettext
の観点からは存在しません。 つまり、
gettext
文字列は、翻訳が必要な文字列です。
JavaScriptファイルで
gettext
を使用する例を次に示します。
app.get('/', function(req, res) { res.render('homepage.ejs', { title: req.gettext('Hello, World!') }); });
ローカライズのためにアプリケーションを準備するには、
gettext
呼び出しですべての行をラップする必要があります。
言語定義
ユーザーがどの言語を好むかをどのように知るのですか? その定義は、実行時にミドルウェアによって処理されます。
i18n-abideモジュールは、HTTP要求の
Accept-language
フィールドを調べます。 ユーザーが理解できる言語を優先順にリストします。
abideは、この値をサポートされている言語のリストと比較し、最適なものを選択して、クライアントにページのローカライズバージョンを提供します。 適切な翻訳が見つからない場合、フレーズはコードおよびテンプレートの
gettext
呼び出しから直接置き換えられます。
おわりに
2番目の記事では、文字列がどのように抽出、処理、および翻訳されるかを正確に見ていきます。
3番目では、技術的な詳細と設定パラメーターをより詳細に扱い、ローカライズ結果をテストします。
サイクルのすべての記事:
- 「 Node.jsでのメモリリークのハンティング 」
- 「 ノードを眼球にロードします 」
- 「 アプリケーションのスケーリングを簡素化するために、クライアントにセッションを保存します 」
- 「 フロントエンドのパフォーマンス。パート1-連結、圧縮、キャッシング 」
- 「 負荷がかかってもクラッシュしないサーバーを作成しています 」
- 「 フロントエンドのパフォーマンス。パート2-etagifyを使用した動的コンテンツのキャッシュ 」
- 「 node-convictを使用したWebアプリケーション構成の調整 」
- 「 フロントエンドのパフォーマンス。パート3-フォントの最適化 」
- 「 Node.jsアプリケーションのローカライズパート1 」
- 「 Node.jsアプリケーションのローカライズパート2:ツールキットとプロセス 」
- 「 Node.jsアプリケーションのローカライズパート3:アクションのローカライズ 」
- 「 Awsbox-Amazon CloudにNode.jsアプリケーションをデプロイするためのPaaSインフラストラクチャ 」