Pluraluri

Cand merge

Pentru a scrie corect un text în funcție de o variabilă numerică se procedează în felul următor.

echo \Yii::t('app', '{n, plural, =0{are no invoices} =1{one invoice} few{# invoices} other{# invoices}} selected.', ['n' => $n]);

După cum se vede sunt introduse cu ajutorul {} secțiuni de preprocesare, care la randul lor au subsecțiuni {} coresunzătoare fiecărei condiții pentru preprocesare ce se aplică variabilei.
Ce vedeți în exemplu se afișează și se traduce (in PoEdit) după cum urmează:

n EN RO (traducere in PoEdit)
0 no invoces selected. nicio factură selectată.
1 one invoice selected. o factură selectată.
2 .. 19 (few) 19 invoices selected. 19 facturi selectate.
>=20 (other) 20 invoices selected. 20 de facturi selectate.

Pentru mai multe informatii despre utilizarea pluralelor citeste https://www.yiiframework.com/doc/guide/2.0/en/tutorial-i18n#plural iar pentru mai multe informații în general despre internaționalizare în Yii2 citește de aici https://www.yiiframework.com/doc/guide/2.0/en/tutorial-i18n#internationalization.

Cand nu merge (by Catalin)

In cazul in care nu se poate folosi functionalitatea aceasta din Yii::t() – de exemplu cand se face din .js, unde nu am acces la php – atunci trimitem toate cele patru mesaje in JS, cu Yii::t(), de unde facem distinctia cu IF-uri, manual .

PHP

$this->xxxItemsSelectedMessage = [
    '0' => \Yii::t("app", "no documents selected"),
    '1' => \Yii::t("app", "one document selected"),
    'n' => \Yii::t("app", "{x19} documents selected"),
    'm' => \Yii::t("app", "{x20} documents selected"),
  ];

......    

$ret .= "<script>
  var xxxItemsSelectedMessage = new Array();
  ";
foreach ($this->xxxItemsSelectedMessage as $key => $value){
  $ret .= "xxxItemsSelectedMessage[\"$key\"] = \"$value\";\n";
}

$ret .="</script>";

 

JS

var compiledTitle = "";
if(countToUse<=0){
  compiledTitle = xxxItemsSelectedMessage['0'];
}else if(countToUse==1){
  compiledTitle = xxxItemsSelectedMessage['1'];
}else if(countToUse<20){
  compiledTitle = xxxItemsSelectedMessage['n'].replace('{x19}', countToUse);
}else{
  compiledTitle = xxxItemsSelectedMessage['m'].replace('{x20}', countToUse);
}
$('#bulkActionsMenuTitle').html(compiledTitle);

 

Cine are urechi, sa auda!

About

Marele Po, UX Expert und Business Specialist

Categories: i18n |

One thought on “Pluraluri

Leave a Reply

Your email address will not be published. Required fields are marked *

[TOP]