今までのバージョンの Drupal では,翻訳可能な原文が複数の場面で使われていても,その場面の違いを認識できませんでした。この問題が,Drupal 7 になって(さらなる努力は必要ですが)解決したようです。

たとえば,ユーザーを追加するページ (http://example.com/admin/user/user/create) でパスワード強度を判定していて,パスワードが十分に複雑な場合には“strong”という文字列が返されます。この場面にふさわしい訳語は,「強い」「強固」などでしょう。

同じ“strong”という文字列が別の箇所,たとえば Compose tips (入力の手引き http://example.com/filter/tips) でも,HTML の <strong> タグの機能について説明するために使用されているのです。この場面にふさわしい訳は,「強調」でしょう。

Drupal 6 までの翻訳可能文字列を識別する t() 関数では,この両者の違いを認識できませんでした。

しかし,ありがたいことに,Drupal 7 になって,t() 関数が context というパラメーターを受け付けるようになりました。

たとえば,前者の“strong”という文字列を,以下のように t() 関数で囲います。
t('Strong', array(), array('context' => 'password strength'))
また,後者の“strong”は,以下のようにします。
t('Strong', array(), array('context' => 'compose tips'))
(上記の context パラメーターは例です)

こうすることで,Drupal の翻訳インターフェースや l.d.o. で,それぞれの“strong”は同じ文字列ながら別々の翻訳対象オブジェクトとして認識されるようになりそうです。

ただ,Drupal コアそのものも,この context パラメーターをそれほど活用できておらず,l.d.o. 管理者の Gabor さんによると,上記の“strong”のように訳し分けが必要な文字列を翻訳者や翻訳版 Drupal のユーザーたちがレポートしてくれるのを期待しているとのことです。僕たち自身が使いやすい Drupal を作るためにも,そして他の言語を使う人たちの役に立つためにも,こうした二つ以上の場面で使われていて,いずれかの意味が不適切な翻訳を発見したら l.d.o. の issue queue までぜひお知らせください。

Groups audience: 

Comments

これは便利ですね。
前述の「About」もそうですが、「Contains」など複数の場面で使用されるためにどっちつかずな訳にせざるを得なかったのが解決されるわけですね。
あとはコアや各モジュールが対応してくれるのを待つばかりです。

@PineRay

> 前述の「About」もそうですが、「Contains」など複数の場面で使用されるためにどっちつかずな訳にせざるを得なかったのが解決されるわけですね。

そうですね。たとえばある語が2カ所で使われていて,両方に合致する訳をひねり出したとしても,新しいモジュールが登場してその語を使ってしまう可能性がゼロには決してならないので,結局いずれかの時点で破綻をきたすと思っていました。コンテクストという概念でそれぞれを完全に別の語として認識してくれれば,一切の心配から解放されますね。

> あとはコアや各モジュールが対応してくれるのを待つばかりです。

ただ,コアやモジュールの開発者たちは英語圏の人たちが多いため,どうしても翻訳版ユーザーの視点というのが欠けてしまいがちだと思います。だから今現在のコアですら long month name というコンテクストしか使われていないのだと思います。ですから,私たち翻訳版ユーザーが声を上げて(つまり,issue queue に問題報告して)いくことが非常に重要です。さもないと,コンテクスト別翻訳の機能はあるのに利用されていない,という結果になりかねないと思っています。

なるほど、そうですね。コンテクストで分けるべきワードを見つけたら、どんどん報告するようにします。

エクスポートしたD7のpoファイルをPoeditで読み込んでもコンテクストが表示されないですね。対応していないのかな。

あるユーザーインターフェース文字列に特定コンテクストを適用してほしい旨の Request / Issue 例。
ほかにも見つけ次第,ここに追加していく予定です。

http://drupal.org/node/742422

ここ(http://localize.drupal.org/node/1043 )にありますが、D7でモジュールのヘルプを開くと、「このモジュールについて」という意味の'About'が正しく翻訳できないために現状では「約」と表示されます。これは何となくがっかりするので、適宜翻訳できるようにコンテクストを追加するパッチを上げておきました:
http://drupal.org/node/826472

これがコミットされると、hook_help()内の'About'を正しく翻訳できるようになります。早く採用してもらえることを願います。