Latte ohýbání slova dle hodnoty proměnné

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kazlik
Člen | 19
+
+1
-

Zdravím, mám pocit, že jsem někdy někde asi v dokumentaci narazil na to, že lze nastavit u latte ohýbání slova dle hodnoty proměnné

1 - kus
4 - kusy
5 - kusů

ovšem teď se to snažím najít ale nikde nemůžu tomu přijít na stopu :/ Nevíte, jak se to makro jmenuje?

Editoval kazlik (29. 10. 2015 7:24)

Matey
Člen | 142
+
+3
-

Ahoj, nepletieš si to s Kdyby/Translation ? tam je táto funkčnosť skloňovania.

Ondris
Člen | 37
+
0
-

V čistým latte to určitě nejde. Něco podobného jsem viděl ve formě doplňku, ale myslím, že to fungovalo jen na jména.

Šaman
Člen | 2666
+
0
-

Můžeš si na to dopsat jednoduchý filtr, ale ta slova ho budeš muset naučit všechna. Jestli se jedná jen o kusy (a pár dalších jednotek), tak by to mělo být jednoduché.

leninzprahy
Člen | 150
+
+8
-

Třeba https://github.com/…/Helpers.php#L84

registrovat jako filtr

$template->addFilter('plural', function($n) {
	$args = func_get_args();
	return $args[($n == 1) ? 1 : (($n >= 2 && $n <= 4) ? 2 : 3)];
});

použití pak

{$number|plural:'kus':'kusy':'kusů'}

Editoval leninzprahy (29. 10. 2015 18:31)

chikeet
Člen | 160
+
+5
-

Pokud se ti to hodně opakuje a nechce se ti to pokaždé vypisovat, tak třeba i filtr pro každou jednotku. Nebo něco jako unitPlural($val, $unitName), nějak takhle:

<?php
$template->addFilter('unitPlural', function($val, $unit) {
    $verbals = [
        'ks' => ['kus', 'kusy', 'kusů'],
        'os' => ['osoba', 'osoby', 'osob'],
        //...
    ];
    $unitVerbals = $verbals[$unit];
    return $unitVerbals [($n == 1) ? 0 : (($n >= 2 && $n <= 4) ? 1 : 2)];
});
?>

použití:

{$number|unitPlural:'ks'}

za předpokladu, že máš pár slov (třeba ty jednotky), která se často opakují.

Editoval chikeet (29. 10. 2015 22:34)

Pavel Janda
Člen | 977
+
+2
-

Ať už máš aplikaci lokalizovanou nebo ne, je též možnost tahat to přes nějaký Translator.

{_'Koupil jsem si %d %d:kočku|kočky|koček', $count, $count}

Připadá mi to asi nejzajímavější.

Editoval Pavel Janda (30. 10. 2015 8:22)

kazlik
Člen | 19
+
0
-

Děkuji za rady, asi jsem to fakt viděl někde jinde, možná u Laravelu po ktérém jsem se před měsícem pokukoval, ale pak se rozhodl pro Nette :) Děkuji