2017-04-20 3 views
1

私はphalcon translateプラグインを使用しています。 私は2つのファイルfr.phpとen.phpを持っていて、異なるキー値を持つ配列を含んでいます。例えばphalconマルチリンガルプラグインでpluralを使う方法

$messages = array("Familyname"=> "Nom","Firstname"=> "Prénom");

しかし、同じ単語のために私は私がこれをどのように行うことができ、単数形と複数形を持っている必要がありますか?

たとえば、私はarray("company"=>"company")です。複数の会社がある場合、"companies"で、companyではないとします。

今のところ私はこの結果を得たい場合、この結果を得るには別の方法があるので、"company""companies"の2つのキーを作成する必要がありますか?

+1

現実的に自然言語には非常に多くの例外や癖があります。正しいと言えば正しいと思いますが、それは手作業で行うことなので、* company *と* companies *翻訳の両方が必要になります。 – CD001

+0

最良の解決策は、> 1ならテストサーバー側を避け、複数のキーを取ることです。 Phalconはi18n node.jsプラグインhttps://www.npmjs.com/package/i18n#i18n__nのようなメソッドを実装していますか? – John

答えて

0

翻訳マトリックス配列を使用する以外の選択肢はありますか?どういうわけか、あなたがギャンブルを好む場合を除いて、あなたが現在持っている可能性が最も高いオプションのようです。あなたの単数名詞の正確な複数形を与えるために、この機能に頼ることはありません

function pluralize($translatedString, $lang="en"){ 
    switch($lang){ 
     case "en": 
      $rX   = "#[yY]{1}$#"; 
      $pluralForm = (preg_match($rX, $translatedString)) ? preg_replace($rX, "ies", $translatedString): "s"; 
      break; 
     case "fr": 
      $pluralForm = "les {$translatedString}s"; 
      break; 
     case "de": 
      $pluralForm = preg_replace("#(.)$#", "en", $translatedString); 
      break; 
     default: 
      $rX   = "#[yY]{1}$#"; 
      $pluralForm = (preg_match($rX, $translatedString)) ? preg_replace($rX, "ies", $translatedString): "s"; 
      break; 
    } 
    return $pluralForm; 
} 


var_dump(pluralize("Company", "en")); //<== YIELDS string 'Companies' (length=9) 
var_dump(pluralize("Societé", "fr")); //<== YIELDS string 'les Societés' (length=13) 
var_dump(pluralize("Firma", "de"));  //<== YIELDS string 'Firmen' (length=6) 

BIG注:あなたはギャンブルのオプションを選択した場合、あなたはこれを試してみてください。英語の場合、これは理想的かもしれませんが、それは他の言語の合理的なPluralを吐き出す方法(もしあれば)を見ることです。しかし、前述のように、このシナリオでは、変換行列を使用することでこの方法が実現します。

+0

* fish *はどうですか? ...または*羊*? – CD001

+0

@ CD001 ** LOL **これは、ポストの下に**大きな注釈**がある理由であり、ポイントはまた、これがギャンブラーのルートであることを強調しました...そして、何とか感じる時を除いて..... – Poiz

関連する問題