2012-01-22 6 views
2

私はCakephpの国際化を使用しており、その言葉に文脈を与えたいと思っています。 メッセージは、アプリケーションのデフォルト言語として英語で書かれています。 一部の(太字の)メッセージはデータベースから送られます。たとえば :CakePhp i18nの単語にコンテキストを追加するには?

オリジナル:Hodnotenie prvéhoročníka、prvej CASTI、prvéhostupňa:最初レベルの最初一部の最初グレード...

翻訳の評価...

一部の言語では、単語が異なる単語で使用されています。例えば、1つの単語の10の異なる形態が存在し得る。どのようにしてcakephpアプリケーションに、データベースから来た「最初の」単語の正しい形式を表示するように指示できますか?

+0

文法的な違いは何ですか*prvého*と* prvej *の間?どんなコンテキスト情報が必要ですか? – deceze

+0

また、「最初の」動的ですか?私。 1→「最初」、2→「秒」などを動的に生成しますか?あなただけの文法の違いは言うまでもなく、英語だけではかなり難しいです。この場合の簡単な選択は、序章を避け、「レベル1のパート1の等級1の評価」を出力することです。そうでなければ、たくさんのコードを書く必要があります。 :) – deceze

+0

文法上の違いは、男性の性別、性別、単数については_prvého_の形式であるということです。 _prvej_は女性の性別、性別、単数形の形式です。はい、スロバキア語では、物事は自分の性別を持つことができます。 ノーマルが必要です。私は数字で置き換えることはできません –

答えて

0

CakePHP(少なくとも1.3)は、__d()関数を提供します。

あなたが翻訳したい単語の文法的意義を指定するには、「ドメイン」を使用することができ
__d($domain, $message, $return) 

:それは次のように使われています。コードを書いたら、CakePHPのi18nコンソールタスクを実行します。これによりAPP/locale /に複数の.potファイルが作成され、名前は.potになります。 Filenameは$ domainなので、あなたが定義したそれぞれの文法上の意味のための.potファイルを得るでしょう(実際には、私はこれについて適切な言葉を知らない)。

CakePHPのi18nコンソールタスクは、翻訳機能のためにあなたのアプリのファイルを検索し、翻訳される文字列をファイルに配置します。少なくとも、それは動作すると思います。翻訳したいコンテンツが動的である場合(あなたの場合)、コンソールタスクはあなたの文字列を見つけることができません。つまり、自分で.potファイルを構築する必要があります。 すべて翻訳が必要なコンテンツが動的である場合は、文法的に重要な意味で翻訳機能を含むファイルを1つ作成し、コンソールタスクを実行して、少なくとも適切なファイルを作成することができます。

生成された.potファイルには、変換が必要な文字列に対して次の3行が含まれます(その文字列が複数回使用されていない限り、その場合は1つの出現があり、それぞれの発生について)。その前にハッシュタグを持つ行がちょうどあなたの参照のためである

#: /app_controller.php:129 
msgid "Home" 
msgstr "" 

(文字列が発生した場所を確認するために)あなたがファイルを自分で構築した場合、あなたはそれを追加する必要はありません。 'msgid'は翻訳したい/ senctenceで、 'msgstr'は提供された翻訳です。 ファイルを自分でビルドするには、これらの3行を繰り返しコピーし、msgidを変更して何かを翻訳として入力するだけです。私は、これらのファイルを構築する最も簡単な方法は、最初にファイルを作成してから、コンテンツをコピーすることです(msgidはこれらすべてのファイルに対して同じです)。次に適切な翻訳を入力します。

完了後、.potファイルをAPP/locale // LC_MESSAGES /に移動し、拡張子を.poに変更します。

この方法は、翻訳機能が翻訳に必要な前に.poファイルのハードコーディングに依存しているため、翻訳する単語の数が固定されている場合にのみ有効です。あなたがユーザー入力を翻訳している場合、おそらくこれは理想的な解決策ではありません。

出典:

  • CakePHPの国際化機能を備えた自身の経験を
  • CakePHP Book on Internationalization
  • 例は、私が働いているアプリで.POTのいずれかのファイルからコピーされます。
+0

それは言葉の各形式のために別々の.poファイルを持つ必要があることを意味しますか?私は複数形のようなエレガントなものを探しています。 –

+0

実際、単語の各形式のファイルが必要です(ただし、各ファイルには複数の単語が含まれます)。私は今、男性/女性、複数/単数、複数の文法の場合、これは非常に多くのファイルに相当することに気づいています。 – Joep

+0

その場合、上記の回答を[__n()](http://api.cakephp.org/file/cake/basics.php#function-__n)または[__dn( )](http://api.cakephp.org/file/cake/basics.php#function-__dn) これらの機能は似ていますが、私はそれらを使用する経験がありません。本(1.3)は悲しいことにそれらを説明していない。 あなたは自分自身の仕事について何らかの調査をしなければならないかもしれませんが、これらの機能は複数のカウントを持つ単一/複数のサポートを必要とします(引用によると "カウントに応じて複数のメッセージに対して複数の言語があります。 – Joep

2

質問の後いくつかの時間の後に、__x()機能が追加されました。これは、i18nリテラルにコンテキストを追加するためのものです。

一般的なヘルプ: https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#using-translation-functions

移行ガイド:CakePHPの3のための https://book.cakephp.org/2.0/en/appendices/2-6-migration-guide.html#basics-php

API情報: https://api.cakephp.org/3.4/function-__x.html

CakePHPの2のためのAPI情報: https://api.cakephp.org/2.9/function-__x.html

関連する問題