2011-05-26 3 views
11

RailsアプリケーションでGettextを使用して文法上の性別を扱うための、シンプルで洗練された方法を探しています。同じ方法でn_()メソッドで処理されます。Gettextで文法性を扱う

言葉は性別によって異なるわけではありませんが、スペイン語に翻訳するときは英語には関心がありません。彼は英語の良いユースケースです。これは本当にスペイン語に翻訳するときに必要です。

例:ユーザーパブロ(オス)とマリア(メス)を考慮すると

_('%{user} is tall') & {:user => user.name} 

はもちろん

'Pablo es alto' 
'María es alta' 

に翻訳されるべき、我々はuser.gender

任意のアイデアへのアクセス権を持っていますか?

乾杯!

答えて

10

これは、コンテキストを使用して解決することができる標準のgettextの機能を使用します。適切な呼び出しのように:

p_('Male', '%{user} is tall') 

または

p_('Female', '%{user} is tall') 

をこれは、「男性」と「女性」の文脈でそれらをマークgettextのカタログに2つの別々の文字列を生成します。

+1

私はこの答えが以前にマークされたものよりも正しいと思います。ありがとう! – dgilperez

3

残念ながら、これはgettextシステムの制限です。数字以外にも、言語機能は、キーオフした言語に基づいています。あなたがスペイン語であなたのすべての弦をキーするなら、それはうまくいくでしょう。

もう1つの方法は、文字列に文字列を追加して文字列を取り除くことです。

私は、Rubyに慣れていないんだけど、擬似コードでの基本的な考え方は次のようになります。

if (user.sex == male) { 
    strip_last_char(_('%{user} is tall♂') & {:user => user.name}) 
} else { 
    strip_last_char(_('%{user} is tall♀') & {:user => user.name}) 
} 
+0

私がすでに疑っていることを確認し、非常に興味深い回避策を提供してくれてありがとう! – dgilperez

+0

@dgilperez - ようこそ! – DougW

+0

+1の特殊文字の解決策! –

1

plural form gettextのメカニズムについてはどうでしょうか。通常、パラメータnは、単数形と複数形を区別するために使用されます。

ここでは、量の代わりに性別を定義するためにnを使用するとします。よってp.ex. n = 1は女性(単数ではない)を意味し、n = 2(またはn> 1)は女性を意味し、複数ではありません。

n = user.male? ? 1 : 0 
n_('%{user} is tall', '%{user} is tall', n) & {:user => user.name} 
+0

正しいルビ構文dgilperezのためのthx。私が提案したようにnの代わりにuser.genderを使用すると、これは2つのジェンダーフォームを持つ他の言語でも使用できます。またPlural-Forms(Plural-Forms:nplurals = 2; plural = n == 1?0:1;)あなたのメッセージに.po – Knut

+2

いいえ!何百万回も!複数形の特徴の全体的なポイントは、異なる言語が複数形の数が異なり、単数形と複数形の異なる形を持たないことです。決してそれをしないでください! – CodeMonkey

関連する問題