gettextを使用して長いテキスト(ビューおよび電子メールテンプレート)を翻訳する


9

多言語のPHP Webアプリケーションを開発していて、gettextで翻訳する必要がある長い(-っぽい)テキストがあります。これらは、電子メールテンプレート(通常は短いですが、それでも数行)とビューテンプレートの一部(テキストのより長い説明ブロック)です。これらのテキストには、いくつかの単純なHTMLが含まれます(強調のための太字/斜体など、おそらくここまたはそこへのリンク)。テンプレートは、出力がキャプチャされるPHPスクリプトです。

問題は、gettextが長いテキストを処理するのに非常に扱いにくいように見えることです。長いテキストは通常​​、短いテキストよりも時間の経過により多くの変化があります— msgidを変更して、すべての翻訳で更新することを確認できます(多くの作業が必要で、msgidが長い場合はエラーが発生しやすくなります)。 msgidは変更されず、翻訳のみが変更されます(テンプレートに古いテキストが紛らわしくなります)。また、私はgettext文字列にHTMLを含めることに対するアドバイスを見てきましたが、これを回避すると、単一の自然なテキストが多数のチャンクに分割され、翻訳と再構築の悪夢がさらに大きくなるでしょう。 gettext文字列を個別のmsgidに不要に分割する。

私が目にするもう1つのアプローチは、これらの長いテキストではgettextを完全に無視し、それらのブロックを各ロケールの外部サブテンプレートに分離し、現在のロケールのブロックを含めることです。欠点は、gettext .poファイルと完全に異なる場所にある個別のテンプレートとの間の変換作業を分離していることです。

このアプリケーションは将来的に他のアプリケーションの出発点として使用されるので、長期的には最善のアプローチを考え出そうとしています。このようなシナリオでのベストプラクティスについていくつかアドバイスが必要です。同様のケースをどのように実装しましたか?何がうまくいき、何が悪い考えになったのですか?


回答:


3

少し前に同様の問題に遭遇しました(/programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-changeを参照)。

基本的に、2つのオプションがあります。

  1. gettextの使用方法と同じ方法で行います。元のテキストをmsgid、HTMLなどとして使用します。その後、元のテキストを変更すると、すべての翻訳が無効になります。msgmergeただし、のあいまい一致では、通常、正しい元のテキストが古い翻訳と一致するため、通常、古い翻訳を翻訳者が利用できます。
  2. 元のテキストをmsgidとして使用するのではなく、何らかの合成識別子(EMAIL_TEMPLATE_NEWSLETTER_STARTなど)を使用します。これにより、IDが変更されることはありません。元の(おそらく英語の)テキストは、単にgettextへの別の翻訳になります。主な欠点:1)最新の翻訳を個別に追跡する必要があります。2)一部のgettextツールはこれをうまく処理しない場合があります(翻訳者は特別なツールを必要とする場合があります)。

1

msgidを変更し、すべての翻訳で更新するようにしてください(大量の作業になる可能性があり、msgidが長い場合はエラーが発生しやすくなります)

これは簡単に自動化できるため、エラーが発生しにくく、作業も少なくて済みます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.