nyoncode / laravel-czech-names
Skloňování českých jmen do všech sedmi pádů a oslovování pro Laravel — „Dobrý den, Ondřeji,".
Requires
- php: ^8.2
- ext-mbstring: *
- illuminate/contracts: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- nyoncode/laravel-package-toolkit: ^2.2
Requires (Dev)
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.1|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
- phpstan/phpstan: ^2.1
README
Skloňování českých jmen do všech sedmi pádů a oslovování.
use NyonCode\CzechNames\Facades\CzechNames; CzechNames::salutation('Ondřej Nyklíček'); // Dobrý den, Ondřeji, CzechNames::salutation('Petra Nováková', 'informal'); // Ahoj, Petro, CzechNames::salutation(null); // Dobrý den, CzechNames::decline('Ondřej Nyklíček', 3); // Ondřejovi Nyklíčkovi CzechNames::vocative('Ing. Marek Dvořák'); // Marku
Instalace
composer require nyoncode/laravel-czech-names
Konfigurace (nepovinná) se publikuje přes php artisan czech-names:install.
Co umí
Sedm pádů křestních jmen i příjmení, obou rodů. Nejde o lepení koncovek — čeština mění i konec kmene:
| 1. pád | 2. pád | 3. pád | 5. pád | 7. pád | |
|---|---|---|---|---|---|
| vzor pán | Petr | Petra | Petrovi | Petře | Petrem |
| prchavé „e" | Zdeněk | Zdeňka | Zdeňkovi | Zdeňku | Zdeňkem |
| vzor muž | Ondřej | Ondřeje | Ondřejovi | Ondřeji | Ondřejem |
| vzor žena | Lenka | Lenky | Lence | Lenko | Lenkou |
| vzor růže | Marie | Marie | Marii | Marie | Marií |
| přechýlené | Nováková | Novákové | Novákové | Nováková | Novákovou |
| přídavné | Novotný | Novotného | Novotnému | Novotný | Novotným |
Odhad rodu. Nejsilnější stopa je přechýlené příjmení (-ová, -á) — to
znamená ženu bez ohledu na křestní jméno. Teprve pak rozhoduje tvar jména.
Tituly (Ing., Mgr., MUDr., Ph.D.…) se před skloňováním zahodí.
Čeho se nedotkne
⚠️ Když si pravidla nejsou jistá, vrací jméno beze změny. Zkomolené jméno
je horší než nesklonné: nesklonného si čtenář všimne jako strohosti,
zkomoleného jako neúcty. Týká se to cizích jmen na samohlásku (Nicolo),
příjmení na -ů (Janů), ženských jmen na souhlásku (Dagmar) a neznámého rodu.
⚠️ Není to stoprocentní a být nemůže. České skloňování jmen má místa, kde tvar slova nestačí a rozhoduje zvyk u konkrétního jména:
-lje jediná souhláska, kde se z tvaru poznat nedá:Michal → Michala(tvrdě), aleKrál → Krále(měkce). Řeší se seznamem výjimek (Irregulars::SOFT_L_NAMES), ne pravidlem — a ten seznam je krátký.- Obourodá jména (Saša, Nikola, Kája, Jindra) nemají rod v tvaru. Odhad
je pošle na ženský vzor, takže u muže zůstane příjmení nesklonné
(
Saša Novák→Saši Novák). Oslovení je přitom správně v obou čteních — jména na-amají 5. pád-obez ohledu na rod (Sašo,Jano,Honzo). - Cizí jména na samohlásku (Nicolo, André, Mia) nemají v češtině ustálený vzor; balíček je vrací beze změny.
- Ženská jména na souhlásku (Dagmar, Ester) se v praxi neskloňují a jsou vyjmenovaná — jméno mimo seznam se skloní jako mužské.
Proto má každý model možnost skloňování přebít (salutationOverride())
a proto se v pochybnostech vrací jméno beze změny.
Rod jim předej, nebo použij ruční tvar:
CzechNames::salutation(CzechNames::name('Saša Novák', 'masculine')); CzechNames::name('Saša Novák', vocative: 'Sašo');
Modely
Model řekne, jak se ten člověk jmenuje, přes Addressable — balíček se pak
neptá na sloupce, ty se v každé aplikaci jmenují jinak:
use NyonCode\CzechNames\Contracts\Addressable; use NyonCode\CzechNames\Enums\Gender; class Contact extends Model implements Addressable { public function salutationName(): ?string { return $this->name; } public function salutationGender(): Gender { return Gender::Unknown; } public function salutationOverride(): ?string { return $this->vocative; } } CzechNames::salutation($contact); // Dobrý den, Ondřeji,
salutationOverride() přebije skloňování úplně — od opravy chybného pádu
(Sašo) po vlastní oslovení (pane doktore).
Tón
formal vyká, informal tyká. Rozhoduje jen o výchozím pozdravu; pád je
v obou případech stejný a tělo zprávy si tón musí pohlídat autor.
Náhrada bez jména se skládá ze stejného pozdravu — jinak by část publika dostala „Ahoj," a část „Dobrý den," podle toho, u koho zrovna chybí jméno.
Testy a zdroje
composer test
Tabulka v tests/Unit/DeclensionTest.php je psaná po jménech, ne po
pravidlech, aby šlo nové jméno přidat, aniž by ho někdo musel zařazovat
ke vzoru.
Pravidla i sporné tvary jsou ověřené proti Internetové jazykové příručce Ústavu pro jazyk český AV ČR, ne proti citu:
- Osobní jména mužská zakončená na souhlásku
– 5. pád:
-upo k/g/h/ch (Nováku, Balogu),-ipo s/z/x (Aloisi, Klausi) a po měkkých (Mareši, Baláži),-epo ostatních (Pavle, Havle); ponechané pohybné-e-neměkčí (Wolker → Wolkere). - Osobní jména mužská zakončená na [a], [á] – vzor „předseda" (Svobody, Svobodo) a podtyp „paňáca" pro kmen na měkkou souhlásku nebo i/y (Nohavici, Borgii, Goyi).
- Osobní jména ženská zakončená na [a], [á]
– jména na
-iajdou podle vzoru „růže": Julia – 2., 5. p. Julie – 3., 4. a 6. p. Julii. - Jednotlivá hesla: Denis, Král, Němec, Soňa, Dagmar.
Licence
MIT