2011-05-26 45 views
11

我正在尋找一種簡單適當的方式來在Rails應用程序中用Gettext處理語法性別,方法與n_()方法一樣處理複數。用Gettext處理語法性別

這對英語沒有興趣,因爲單詞不會隨着性別而變化,但它在翻譯成西班牙語時確實存在。他/她是英語的良好用例。翻譯成西班牙文時,這確實是需要的。

一個例子:

考慮用戶巴勃羅(男性)和María(女)。

_('%{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的目錄兩個單獨字符串爲「男性」和「女性」環境標誌他們。

+1

我認爲這個答案比以前標記的答案更正確。謝謝! – dgilperez 2013-12-13 22:34:54

3

不幸的是沒有。這是gettext系統的一個限制 - 除了數字之外,語言特性是基於您鍵入的語言。如果你要用西班牙文輸入所有的字符串,那就行了。

另一種選擇是將字符附加到字符串以便翻譯,然後剝離它。

我不熟悉的紅寶石,但在僞代碼的基本想法是:

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 2012-05-05 11:57:57

+0

@dgilperez - 歡迎光臨! – DougW 2012-05-08 22:04:33

+0

+1爲特殊字符解決方案! – 2013-01-30 04:42:58

1

怎樣使用gettext的plural form機制。通常使用參數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

thx爲正確的ruby語法dgilperez。如果你使用user.gender而不是n,就像我提出的那樣,那麼這也可以用於具有更多兩性別表單的其他語言。複數= n == 1?0:1;)在您的訊息裏.po – Knut 2013-12-14 11:37:53

+2

不!一百萬次沒有!複數形式特徵的要點在於,不同語言具有不同數量的複數形式,或者根本不具有單數和複數形式。永遠不要這樣做! – CodeMonkey 2016-03-17 13:04:37