5

私は Web プロジェクトに取り組んでおり、それは (できれば) いつの日か複数の言語で利用できるようになります (「できれば」と言うのは、今日は英語のサイトしか計画していませんが、私の会社の他の製品は多言語対応であり、それも必要なほど成功しています)。

ベスト プラクティス (ここでは Java、Spring MVC、および Velocity を使用しています) は、ユーザーに表示されるすべてのテキストを外部ファイルに配置し、UI ファイルで次のように名前で参照することであることを理解しています。

#in messages_en.properties:
welcome.header = Welcome to AppName!

#in the markup
<title>#springMessage("welcome.header")</title>

しかし、これまでプロジェクトでこのプロセスを実行する必要がなかったので、次のようなマークアップに重きを置いた UI セグメントがある場合、これに対処する最善の方法は何かに興味があります。

<p>We are excited to announce that Company1 has been acquired by
<a href="http://www.companydivisionx.com" class="boldLink">Division X</a>,
a fast-growing division of <a href="http://www.company2.com" class="boldLink">Company 2</a>, Inc. 
(Nasdaq: <a href="http://finance.google.com/finance?q=blah" class="boldLink">BLAH</a>), based in...

私が考えることができる1つのオプションは、この「低レベル」のマークアップをメッセージのmessages.properties自体に保存することですが、これは考えられる最悪のオプションのようです。

私が考えることができる他のオプションは次のとおりです。

  • 、 、などacquisitionAnnounce1、各非マークアップ内部フラグメントを messages.properties に格納します。しかし、これは非常に退屈に思えます。acquisitionAnnounce2acquisitionAnnounce3
  • このメッセージを 、 、 などの再利用可能なコンポーネントに分割しCompany1.nameますCompany2.nameCompany2.tickerこれらの各コンポーネントは他の多くのメッセージで再利用される可能性があります。これはおそらく、この特定のメッセージの単語の 80% を占めるでしょう。

このようなマークアップを多用した国際化テキストを処理するためのベスト プラクティスはありますか? すべてのテキストを分割する苦痛に耐えなければなりませんか? あなたが個人的に扱ったプロジェクトの中で、最善の解決策は何ですか?

4

4 に答える 4

6

他の人が言ったように、文字列をセグメントに分割しないでください。翻訳者は、あなたがうっかり作成したその場しのぎのルールに合わせて言語構文を強要しなければならないため、翻訳者を悲しませます。特に特定のセグメントを異なるコンテキストで再利用する場合、文法的に正しい翻訳を提供できないことがよくあります。

マークアップも削除しないでください。

プロの翻訳者がメモ帳で作業すると仮定しないでください :) Trados スイートなどのコンピュータ支援翻訳 (CAT) ツールは、マークアップについて完全に理解しています。タグ付けがカスタム XML 形式ではなく HTML である場合、特別な準備は必要ありません。Trados は、必要に応じて変更を許可しながら、偶発的な変更からタグを保護します。代替テキストや一部のクエリ文字列など、タグの特定の要素はしばしばローカライズする必要があることに注意してください。そのため、すべてのマークアップを削除するだけでは不十分です。

何よりも、予算ゼロの個人的なプロジェクトに取り組んでいる場合を除き、ローカリゼーション ベンダーに連絡することを検討してください。ローカリゼーションは、Web デザインと同様のサービスです。有能なベンダーが、プロジェクトに最適なソリューション/フォーマットの選択を支援し、ソース マテリアルの準備とローカライズされた結果の組み込みをガイドします。そしてもちろん、彼らとその翻訳者は必要なツールをすべて備えています。(完全な開示: 私は翻訳者/ローカリゼーションの専門家です。文字列を分割しないでください:)

于 2009-02-05T21:57:33.613 に答える
6

通常、 SitemeshVelocityなどのテンプレート エンジンを使用すると、これらの小さな HTML ビルディング ブロックをサブテンプレートとしてより効果的に管理できます。

そうすることで、純粋に国際化された文字列をグループに段階的に煮詰めて、それらのマークアップ サブテンプレートに関連させることができます。同じロケール内の複数の言語と複数のロケールにまたがるアプリのテンプレートを使用してこの種の作業を行ってきたので、メッセージ バンドルにマークアップを配置したことはありません。

メッセージプロパティファイル内にマークアップを配置しないことをお勧めします (たとえ低レベルであっても) これが地獄を解き放つ可能性は見過ごされるべきではありません - 弾丸をかみ砕いて物事を正しく分割することは、散らばった HTML マークアップで多くのファイルを管理しなければならないよりもはるかに苦痛ではありません。マークアップを全体的なチャンクと分散として視覚化できることが重要です。これは、どこにでもあるため、日常の開発が雑用になります。

  • IDE の色の強調表示と構文の検証が失われます
  • デザイン/マークアップの変更がフィルタ ダウンされると、特定のロケール ファイルまたは別のファイルが簡単に見落とされる可能性が高い

物事を分解する (論理的な文構造など、現実的な点まで) ことは、前もって難しい作業ですが、努力する価値はあります。

文字列内訳の粒度に関して、これが私たちが行ったことのサンプルです:

    comment.atom-details=Subscribe To Comments
    comment.username-mandatory=You must supply your name
    comment.useremail-mandatory=You must supply your email address 
    comment.email.notification=Dear {0}, the comment thread you are watching has been updated.
    comment.feed.title=Comments on {0}
    comment.feed.title.default=Comments
    comment.feed.entry.title=Comment on {0} at {1,date,medium} {2,time,HH:mm} by {3}


    comment.atom-details=Suscribir a Comentarios
    comment.username-mandatory=Debes indicar tu nombre
    comment.useremail-mandatory=Debes indicar tu direcci\u00f3n de correo electr\u00f3nico
    comment.email.notification=La conversaci\u00f3n que estas viendo ha sido actualizada
    comment.feed.title=Comentarios sobre {0}
    comment.feed.title.default=Comentarios
    comment.feed.entry.title=Comentarios sobre {0} a {1,date,medium} {2,time,HH:mm} por {3}

したがって、メッセージ バンドルで文字列を置換する方法で興味深いことができます。これは、論理的な意味を維持するのに役立ちますが、文の途中で操作できるようにするのにも役立ちます。

于 2009-02-05T16:38:43.710 に答える
3

まず、文字列を分割しないでください。これにより、ローカライザーは翻訳する文字列全体を見ることができないため、テキストを翻訳することが非常に困難になります。

おそらく、リンクの周りにプレースホルダーを使用しようとするでしょう:

<a href="%link1%" class="%link1class%">ディビジョン X</a>

これは、サイトを 30 の言語にローカライズしていたときの方法です。完璧ではありませんが、機能します。

文字列からすべてのマークアップを削除することは可能 (または簡単) ではないと思います。URL と追加のマークアップを挿入する方法が必要です。

于 2009-02-05T16:09:51.790 に答える
2

文字列を壊さないようにする必要があります。これは翻訳の悪夢になるだけでなく、ターゲット言語で正しくない可能性のある文法上の仮定も作成します。

プレースホルダーは多くのことに役立ちますが、URL にプレースホルダーを使用することはお勧めしません。これにより、さまざまなロケールの URL をカスタマイズできます。結局のところ、ロケールがアルゼンチンのスペイン語である場合、英語のページに送信しても意味がありません。

于 2009-02-05T17:22:30.783 に答える