django-polish-inflection
Cienka warstwa Django (template tagi i filtry) nad
polish-inflection —
odmiana polszczyzny wprost w szablonach Django, oparta o słownik SGJP:
- rzeczowniki przez wszystkie przypadki i obie liczby (
odmien, aliasy pytajnekogo_czego/komu_czemu/…), - frazy wielowyrazowe (nazwy własne instytucji, np. „Uniwersytet
Lubelski") —
odmien_fraze, - przymiotniki wg rodzaju głowy —
odmien_przymiotnik, - dobór formy wg liczebnika (1 wydział / 2 wydziały / 5 wydziałów) —
odmiana_liczebnikowa.
Przykładowy projekt „Odmieniarka" — pełna tabela odmiany przez przypadki wprost w przeglądarce.
Support graciously provided by
Instalacja
pip install django-polish-inflection
Dodaj do INSTALLED_APPS:
INSTALLED_APPS = [
...,
"django_polish_inflection",
]
Użycie
Wczytaj bibliotekę tagów raz na szablon przez {% load polish_inflection %} — od
tej chwili masz w szablonie cztery narzędzia: generyczny odmien (dowolny
przypadek), zestaw czytelnych aliasów pytajnych (kogo_czego, komu_czemu, …),
dobór formy wg liczebnika (odmiana_liczebnikowa) i odmianę wielowyrazowych nazw
własnych (odmien_fraze). Większość działa i jako tag {% … %}, i — gdy
wystarczy sam przypadek — jako filtr |…; oba warianty zwracają to samo.
{% load polish_inflection %}
Dla przykładowych danych nazwa_jednostki = "wydział" i liczba = 5
(w komentarzach {# → … #} jest wynik renderowania):
Dowolny przypadek — generyczny odmien (w tym mianownik i wołacz, których
aliasów pytajnych brak):
{{ nazwa_jednostki|odmien:"dopelniacz" }}
{# → wydziału #}
{% odmien nazwa_jednostki "dopelniacz" %}
{# → wydziału #}
{% odmien nazwa_jednostki "dopelniacz" liczba="mnoga" %}
{# → wydziałów #}
{% odmien nazwa_jednostki "dopelniacz" as forma %}{{ forma }}
{# → wydziału #}
Aliasy pytajne — czytają się jak zdanie, wystawiane automatycznie z
polish_inflection.pytania:
Oto lista pracowników {% kogo_czego nazwa_jednostki %}
{# → Oto lista pracowników wydziału #}
Kliknij przycisk z {% z_kim_z_czym nazwa_jednostki %}
{# → Kliknij przycisk z wydziałem #}
{% komu_czemu nazwa_jednostki liczba="mnoga" %}
{# → wydziałom #}
{% podstawowa_forma "wydziałów" %}
{# → wydział #}
Dobór formy wg liczebnika — polska zgoda liczebnikowa (1 wydział / 2 wydziały / 5 wydziałów); numer doklejasz sam:
{{ liczba }} {% odmiana_liczebnikowa nazwa_jednostki liczba %}
{# → 5 wydziałów #}
{% odmiana_liczebnikowa nazwa_jednostki liczba "narzednik" %}
{# → wydziałami #}
Frazy wielowyrazowe i przymiotniki — nazwy własne instytucji oraz sam przymiotnik wg rodzaju:
{% odmien_fraze "Uniwersytet Lubelski" "dopelniacz" %}
{# → Uniwersytetu Lubelskiego #}
{{ "Akademia Medyczna"|odmien_fraze:"narzednik" }}
{# → Akademią Medyczną #}
{% odmien_przymiotnik "lubelski" "dopelniacz" "meski" %}
{# → lubelskiego #}
Dostępne aliasy pytajne (dokładnie te, które eksportuje zainstalowana wersja
polish_inflection.pytania.__all__ — nowe funkcje upstreamu o zgodnej
sygnaturze (wyraz, *, liczba=None, default=...) pojawiają się tu
automatycznie): kogo_czego, komu_czemu, kogo_co, z_kim_z_czym,
o_kim_o_czym, podstawowa_forma, oraz skróty komu, czemu, z_kim,
z_czym, o_kim, o_czym.
Mianownik i wołacz nie mają aliasu pytajnego (upstream też ich nie ma) —
używaj do nich generycznego {% odmien wyraz "mianownik" %} / "wolacz".
Odmiana liczebnikowa
{% odmiana_liczebnikowa wyraz liczba %} zwraca rzeczownik w formie
narzuconej przez liczebnik (polska zgoda liczebnikowa: 1 wydział,
2 wydziały, 5 wydziałów). Liczby słownie nie generuje — numer doklejasz
sam. Rodzaj (w tym męskoosobowy m1, np. 2 studentów a nie 2 studenci) jest
wykrywany automatycznie ze słownika. Opcjonalny trzeci argument to przypadek
frazy (domyślnie mianownik), np. {% odmiana_liczebnikowa wyraz liczba "narzednik" %}
przy liczba=5 zwraca wydziałami (liczebnik „pięcioma" doklejasz sam).
Kolejność argumentów jest jak w pozostałych tagach: wyraz pierwszy.
Odmiana fraz wielowyrazowych (nazw własnych instytucji)
{% odmien_fraze fraza "przypadek" %} odmienia wielowyrazowe nazwy własne
instytucji — uczelni, wydziałów, instytutów — a nie tylko pojedyncze
rzeczowniki. Silnik rozpoznaje głowę frazy, odmienia ją wraz z uzgadniającymi
się z nią przymiotnikami i zamraża dopełniaczowy ogon. Wymaga
polish-inflection >= 0.5.2.
{% load polish_inflection %}
{# rzeczownik + przymiotnik — odmieniają się razem #}
{% odmien_fraze nazwa_uczelni "dopelniacz" %}
{# "Uniwersytet Lubelski" -> "Uniwersytetu Lubelskiego" #}
{# "Akademia Medyczna" (narzednik) -> "Akademią Medyczną" #}
{# rzeczownik + dopełniacz zależny — odmienia się tylko głowa #}
{% odmien_fraze nazwa_instytutu "dopelniacz" %}
{# "Instytut Technologii Stosowanej" -> "Instytutu Technologii Stosowanej" #}
{# filtr — gdy wystarcza sam przypadek #}
Sprawozdanie {{ nazwa_uczelni|odmien_fraze:"dopelniacz" }}
{# przypisanie do zmiennej #}
{% odmien_fraze nazwa_uczelni "miejscownik" as forma %}Konferencja na {{ forma }}
Trafność heurystyki to ok. 85–95% realnych nazw; frazy, których nie łapie (np.
„Instytut Polski" — przymiotnik czy dopełniacz?), nadpisujesz ręcznie warstwą
override (patrz Ustawienia). Liczba mnoga fraz jest obsługiwana
(liczba="mnoga") — przymiotnik uzgadnia się z głową, a zależny ogon
dopełniaczowy pozostaje zamrożony (wymaga polish-inflection >= 0.6.0).
Dostępny jest też niższopoziomowy tag {% odmien_przymiotnik lemat "przypadek" "rodzaj" %} (rodzaj: "meski" / "zenski" / "nijaki"), użyteczny gdy
składasz formę samodzielnie:
{% odmien_przymiotnik "lubelski" "dopelniacz" "meski" %} {# lubelskiego #}
{% odmien_przymiotnik "stosowany" "dopelniacz" "zenski" %} {# stosowanej #}
odmien_przymiotnik ma wymagany argument rodzaj, więc — jak
odmiana_liczebnikowa — jest tylko tagiem (filtr Django przyjmuje jeden
argument).
Ustawienia
# settings.py
POLISH_INFLECTION_STRICT = False # domyślnie
False(domyślnie): nieznane słowo w słowniku SGJP nigdy nie wywala renderowania strony — tag/filtr zwraca oryginalne słowo bez zmian.True: nieznane słowo podnosipolish_inflection.BrakOdmiany. Przydatne w testach/CI.
Nadpisania fraz (POLISH_INFLECTION_PHRASE_OVERRIDES)
Zawór bezpieczeństwa dla fraz, których heurystyka {% odmien_fraze %} nie
rozstrzyga poprawnie. Mapa {(fraza, "przypadek"): "gotowa forma"} jest
konsultowana przed silnikiem — jeśli para pasuje, zwracana jest ręczna
forma, w przeciwnym razie działa silnik.
# settings.py
POLISH_INFLECTION_PHRASE_OVERRIDES = {
# silnik heurystycznie daje „Instytutu Polski" (czyta jako dopełniacz);
# wymuszamy czytanie przymiotnikowe:
("Instytut Polski", "dopelniacz"): "Instytutu Polskiego",
("Instytut Polski", "miejscownik"): "Instytucie Polskim",
}
- Klucz przypadka to ten sam przyjazny string, którego używasz w tagu
(
"dopelniacz","miejscownik", …). - Dopasowanie frazy ignoruje nadmiarowe białe znaki (trim + collapse spacji); wielkość liter jest znacząca.
- Nadpisanie dotyczy liczby pojedynczej (klucz nie zawiera liczby); przy
liczba="mnoga"używany jest silnik.
Przykładowy projekt
W katalogu example_project/ jest gotowy do uruchomienia
projekt Django („Odmieniarka"): wpisujesz słowo lub nazwę własną, a strona
generuje pełną tabelę odmiany przez przypadki (l.poj. i l.mn.), łącznie z
działającą warstwą override. Uruchomienie (z korzenia repo, uv sam ogarnia
zależności): uv run python example_project/manage.py runserver.
Zakres
Ten pakiet odmienia pojedyncze rzeczowniki pospolite obecne w słowniku SGJP (np. "wydział", "uczelnia", "instytut") przez wszystkie przypadki i obie liczby.
Odmiana wielowyrazowych nazw własnych instytucji (np. "Uniwersytet Lubelski")
jest dostępna heurystycznie przez {% odmien_fraze %} (patrz wyżej) — wymaga
polish-inflection >= 0.5.2.
Dobór formy rzeczownika wg liczebnika (1 wydział / 2 wydziały / 5 wydziałów)
jest dostępny przez {% odmiana_liczebnikowa %} (patrz wyżej) — wymaga
polish-inflection >= 0.3.0.
Licencja
BSD 2-Clause — patrz LICENSE. Copyright © 2026 Michał Pasternak.
Release files for django-polish-inflection 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_polish_inflection-0.1.1.tar.gz | 191.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_polish_inflection-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 201.1 kB
Release files / django_polish_inflection-0.1.1.tar.gz
| Download URL | django_polish_inflection-0.1.1.tar.gz |
|---|---|
| Size | 191.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42fa3d2d09a63e68bce1464d6cb5e13a5e257a752e45ad52e6e18faab6d5f822
|
|
BLAKE2b-256 checksum How to use checksums |
862a18d426e30c3ab185046dd33d6c3a37f7e6203b1cf1dc89c4046088795d6a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / django_polish_inflection-0.1.1-py3-none-any.whl
| Download URL | django_polish_inflection-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f989f8f9a8ef976c62b0af3075cdf21c6cc76c0a0176619c0bbc7c557f2e2cd
|
|
BLAKE2b-256 checksum How to use checksums |
7100acbaf0e55638bdabe67e9103ba742d5a955c4483cff306e977928756a05b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|