Ako riešite plural stringy pri cz/sk vyrazoch?

yelidric
Člen | 33
+
0
-

Pri anglickych vyrachoch je to jednoduche maju bud len jeden vyraz na plural ale napriklad v slovencine je to hned niekolko. Napriklad 1 rok, 2 roky a zase 5 rokov?

Ako na to idete? Cez polia a vnorene polia? Alebo inak?

Potrebujem len popostrčiť. Ďakujem :)

CZechBoY
Člen | 3608
+
0
-

Spíš jde o to jak teď používáš překladač.
Pokud používáš ITranslator tak do druhého parametru $count metody translate se posílá právě počet.

Nebo tě zajímá konkrétní implementace? Potom pošli jak ukládáš slovník teď.

yelidric
Člen | 33
+
0
-

Ja nepouzivam ziadny translator, stranku mam iba v jednom jazyku a nikdy nebude multijazycna. Takze momentalne ma zaujima iba jeden jazyk.

CZechBoY
Člen | 3608
+
+1
-

Tak nejjednodušší varianta je to pole.

<?php
class ArrayTranslator implements ITranslator
{
	private $dictionary;

	public function __construct()
	{
		$this->dictionary = array(
			'auto' => array (
				1 => 'auto',
				2 => 'auta',
				5 => 'aut',
			);
		);
	}

	public function translate($message, $count)
	{
		$baseCount = $count % 10;

		if ($baseCount < 2) {
			$fixedCount = 1;
		} elseif ($baseCount >= 2 && $baseCount < 5) {
			$fixedCount = 2;
		} else {
			$fixedCount = 5;
		}

		if (isset($this->dictionary[$message][$fixedCount])) {
			return $this->dictionary[$message][$fixedCount];
		}
	}
}

Editoval CZechBoY (23. 12. 2016 13:32)

Kamil Valenta
Člen | 820
+
0
-

CZechBoY napsal(a):

		$baseCount = $count % 10;

		if ($baseCount < 2) {
			$fixedCount = 1;
		} elseif ($baseCount >= 2 && $baseCount < 5) {
			$fixedCount = 2;
		} else {
			$fixedCount = 5;
		}

Používám to podobně, jen podmínky mám jinak, protože teď Ti bude překladač vracet třeba: 20 auto, count=0 by měl být ve stejné větvi jako count >= 5.

Takže udržuju překlady pro:

  • count = 1
  • count = 2 || 3 || 4
  • count = 0 || count > 4