2017-04-20 19 views
1

我使用phalcon translate插件, 我有两个文件fr.php和en.php,其中包含具有不同键值的数组。如何使用复数与phalcon multilingue插件

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

但是对于同一个词,我需要有单数和复数,我该怎么办呢?

例如我array("company"=>"company"),如果我有多家公司,我想要"companies"而不是company

现在,如果我想要这个结果,我必须创建两个键"company""companies"有没有其他的方法来得到这个结果?

+1

实际上没有 - 自然语言有这么多的例外和怪癖,唯一的方法来确保你是什么说的是对的,而且听起来是对的,就是手工做 - 所以你需要公司*和公司*翻译。 – 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) 

大注:

从不依靠这个功能给你的单数名词的确切复数形式。而对于英语而言,这可能是理想的,你应该看看如何(以及如何)让它为其他语言吐出合理的复数。然而,正如前面提到的那样,使用翻译矩阵将是这种情景下的走向......

+0

*鱼*怎么样? ...或*绵羊*? – CD001

+0

@ CD001 **大声笑**这就是为什么在帖子下面有**大注意点**,还强调这是一个赌徒的路线......应该不惜一切代价避免,除非某人以某种方式感觉到它...... – Poiz