Vokativ v PHP - 5. pádem oslovujeme, voláme

(publikováno 28.01.2020) 6 PHP, Tipy & triky

Čeština, pády, oslovení – to vše může vypadat velmi obtížně pro vývojáře, pokud se jména mají skloňovat v programech. Naštěstí to ale vůbec složité není, protože už to plno lidí vyřešilo dříve. Stačí použít vhodnou knihovnu a hned korespondence či uvítací obrazovka může vypadat lépe.

Vokativ v PHP - 5. pádem oslovujeme, voláme

Na oslovení pátým pádem upozorňují již učitelky v mateřinkách. Na základce se pak dětí učí, jak správně skloňovat jednotlivá slova. Nejedná se tedy o žádnou náročnou úlohu, přesto často na ryze českých stránkách či v emailech lze vidět texty jako Dobrý den Pavel. Protože jsem se tomu chtěl osobně vyhnout, hledal jsem možnost jak i programově správně skloňovat jména.

Pokud řešíte naopak ryze slovenský systém, nemusíte se tímto problémem zatěžovat. Slovenština totiž vokativ nepoužívá.

Czech Vocative a NameCase

Pro správné skloňování dobře poslouží 2 knihovny. První je Czech Vocative, u které hned z názvu plyne, jaký plní účel. Jméno v pátém pádě ale je pouze malými písmeny. Od toho je druhá knihovna NameCase, která nastaví velikosti písmen. Obojí lze instalovat pomocí composeru.

composer require granam/czech-vocative tamtamchik/namecase

Příjmení, víceslovná jména

Knihovna zvládne skloňovat také příjmení. Není tedy problém, pokud je potřeba generovat více formální oslovení. Pokud má ale jméno více slov, tady už skloňování trochu vázne. Protože správně česky by se mělo použít pouze první jméno, je nutné si ho vlastnoručně získat. To už ale nemusí fungovat vždy na 100%.

$vocative = new Granam\CzechVocative\CzechName(); 
// Základní nastavení NameCase které používám já, více v dokumentaci
Tamtamchik\NameCase\Formatter::setOptions([ 'irish' => false, 'lazy' => false ]);

$vocative->vocative('Pavel'); // => pavle
Formatter::nameCase($vocative->vocative("Pavel")) // => Pavle
Formatter::nameCase($vocative->vocative("Kutáč")) // => Kutáči

Formatter::nameCase($vocative->vocative("Jan Pavel")) // => Jan Pavle
Formatter::nameCase($vocative->vocative(explode(" ", "Jan Pavel")[0])) // => Jane

// vocative má využití především s českými jmény, NameCase formatter ale zvládá všechna jména
Formatter::nameCase($vocative->vocative("mc'donald")) // => Mc'Donalde
// Samotný NameCase pak nemá problém i s více slovnými jmény a správně formátuje i "spojky"
Formatter::nameCase("armin van buuren") // => Armin van Buuren

Předgenerovaný jmenný seznam

Pro někoho může být jednodušší použít již předgenerovaný seznam. Třeba do jeho jazyka knihovna neexistuje. Takový seznam připravil kolega Kozleek, který je dostupný na Githubu a na stránkách nase-trida.cz. Obsahuje přes 33 000 jmen včetně informace, jestli se jedná o mužské či ženské jméno. Seznam je dostupný v XML a XLSX formátu. Děkuji Tomášovi za komentář!

Za $$$ o úroveň výše

Přímo za účelem oslovování a skloňování vzniklo rovnou celé, částečně placené, API na stránkách sklonovani-jmen.cz. Samozřejmě ale celou proceduru povýšili na úplně jinou úroveň. Nemusí se řešit dělení na jméno, druhé jméno a příjmení. Systém vše detekuje a správně naformátuje. Na svých stránkách nabízí si celý mechanismus i vyzkoušet.

Například ze vstupního textu hana kateřina nováková vzniklo paní Hano Nováková.


Své vlastní postřehy se skloňováním a práci se jmény můžete sdílet v komentářích

K tomuto článku již není možné přidávat další komentáře

Komentáře

Ahoj Pavle,, já jsem si v pythonu generoval XML a XSLS soubor pro hromadné korespondence.
Klidně si to doplň do článku jestli se ti to bude hodit.

https://www.nase-trida.cz/ceska-jmena-osloveni/

Paráda, díky. Odkaz jsem do článku doplnil.

Díky moc za skvělý článek, přesně toto jsme potřebovali, abychom mohli na eshopu hezky česky oslovovat zákaznice :-)

Jsem rád, že článek pomohl. Zrovna dnes jsem jej lehce upravil, protože autor knihovnu již neaktualizuje a nelze ji nainstalovat pro web s PHP 8. Je potřeba tedy využít fork a upravit lehce composer.json.

Děkuji za zmínku mé služby, udělalo mi to radost.

Jen upřesním, že pro malé projekty je zcela zdarma. Většina webů ji využívá v režimu, ve kterém lze ročně bezplatně ohnout přes 3500 jmen, což pokrývá potřeby většiny nekomerčních projektů. Některé weby mé API využívají už 10 let, aniž by musely na 4000 hodin jeho vývoje jakkoliv přispět. :-) Právě náročnost vývoje je důvodem, proč má služba není zdarma i pro větší e-shopy. Ale i pro ně jsou ceny směšné.

Děkuji za info, článek jsem upravil a doplnil.