2012-03-20 14 views
6

PHPをcontent management system拡張可能にするためには、が重要です。私は翻訳システムのプログラミング手法を研究していましたが、Qt Linguistが良い例だと思いました。不規則な規則で言語に翻訳する

これは、Qtのドキュメントからの使用例である:

int n = messages.count(); 
showMessage(tr("%n message(s) saved", "", n)); 

Qtは「message」が英語に添付「s」を有しているかどうかを決定するために、既知の言語規則を使用します。私は私の開発チームとその例を育て

は、彼らが はQtのtr()機能のオフモデリングの拡張効果を危うくするという問題を発見しました。

これはまったく間違っている点を除いて同様の例です。

int n = deadBacteria.count(); 
showMessage(tr("%n bacterium(s) killed", "", n)); 

"​​" 複数 "はbacteria" です。 「s」を追加するのは不適切です。

私はQt言語学者に多大な経験はありませんが、どのように不規則な結合や形を扱うのか分かりません。

さらに複雑なフレーズは"%n cactus(s) have grown."です。 1つのサボテンがある場合は、複数は「cactii」、「have」は「has」にコンジュゲートする必要があります。

これらの不規則な単語がプログラミングで使用されないため、論理的な修正は避けることだと考えるかもしれません。まあ、これは2つの方法で有用ではありません。

  1. はおそらく、元の文字列が"%n message(s) saved"のように、英語で動作していても、不規則な形で名詞を変更した言語があります。 MyImaginaryLanguageでは、変換された文字列を形成する適切な方法は、「M2essageはを保存」「1Messageはを保存」することができ、それぞれ%n12、および3、のために「Me3ssageはを保存」し、それはしていませんQt言語学者がこれを処理するルールを持っているように見えます。
  2. 私が必要とするようにCMSを拡張可能にするには、すべてのタイプのWebアプリケーションを考慮する必要があります。サッカーが成長したような文章を要求するrole-playing gameを作成する人もいます。セキュリティソフトは、「ClamAVのは2ウイルスを発見した。」、言いたいとは対照的に「のClamAVは2つのウイルス(複数可)を見つけました。」に

を他のQtの開発者はこれに対する解決策を持っているかどうかを確認するためにオンラインで検索した後問題が見つかりません、私はスタックオーバーフローに来た。

  1. 何拡張性と効果的なプログラミング技術は、可能な不規則なルールに文字列を変換するために使用する必要があります。

    は、私が知りたいですか?

  2. この不規則性の問題が発生した場合、Qtプログラマと翻訳者は何をしますか?
+0

私はQtのについては何も知らないが、おそらくあなたは、単数/デュアル/複数のエンディングを解析し、拡張子をコーディングするだろうか? 「バクテリア(a/um)」、「(1Message/M2essage/Me3ssage)」は、より多くの作業を必要とし、動的ではない例です。 – Cyclone

答えて

6

あなたはQtの多元化がどのように機能するのか誤解しています。自動翻訳ではありません。

基本的には、デフォルトの文字列があります。 "%sのサボテンが成長しました。"あなたのコードでは、リテラルです。あなたはあなたの好きなものをその中に入れることができます。 "dingbat wibble foo%n bar"

翻訳言語を定義することができます(ソース文字列を書いたのと同じ言語のものを含む)。

言語学者は、言語が何かの量をどのように扱うかについてのさまざまなルールをプログラムしています。英語では、それは単数形または複数形です。しかし、ある言語が0などのための特定の形式を持っているなら、それはLinguistのものを提示します。次に、正しい翻訳文がターゲット翻訳言語になるように入力し、%nを翻訳された形式にすることに決めます。

言語学者の翻訳者はソースを提供され、例えば単数形と複数形を記入する必要があります。

ソース・テキスト:%n cactus(s) have grown.

英訳(特異):%n cactus has grown.

英訳(複数):%n cacti have grown.

アプリケーションは、それをインストールし、翻訳を見つけることができない場合元のリテラルに戻ります。また、ソースリテラルは翻訳者が見ているものであり、あなたがそれを意味するものを推測しなければなりません。したがって、どのように多くのサボテンが成長したかを記述する際には、「dingbat wibble foo%n bar」は良い考えではないかもしれません。

さらに読書:

+0

ああ、それは明らかな魔法を説明しています。いつかQt Linguistを試してみる必要があります。 – Deltik

3

GNU gettext i18nフレームワークを使用することをお勧めします。それはうまくintegrated into PHPであり、正確にdefine複数のフォームについてのすべての奇妙な文法のルールにツールを提供します。

1

Qt Linguistを使用すると、目的の言語に基づいてさまざまな文法番号を処理できます。だから%ntr文字列で検出されるたびに、翻訳者はターゲット言語のすべての必要な翻訳を行うよう求められます。詳細については、この記事をチェックしてください:

http://doc.qt.nokia.com/qq/qq19-plurals.html