Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
L

lvovich

> 编程语言
Open source

Склонение названий городов, определения пола по ФИО, склонения имен по падежам

685 stars0 likes1 views
WebsiteGitHub

About

Склонение названий городов, определения пола по ФИО, склонения имен по падежам

Lvovich (Львович) - JS library to inflect people names, cities names in Russian

0 сторонних зависимостей, может работать как на сервере, так и в браузере.

Этот пакет для:

  • склонения названий городов (работает для большинства составных названий: Санкт-Петербург, Ростов-на-Дону и пр.)
  • определения пола по имени фамилии и отчеству
  • склонения падежей русских имен, фамилий и отчеств

Может использоваться как в браузере, так и на сервере. Нет никаких зависимостей и работает в оффлайне. Самое то:

  • для генерации красивых писем с mjml
  • для генерации PDF c @react-pdf
  • для генерации SEO-заголовков c головой на плечах
  • чтоб по максимуму избавиться от Уважаемый(-ая), когда есть ФИО но нет пола

Минифицированный размер пакета 20KB, gzipped 6KB. Бедные, бедные иностранцы - им надо загрузить в голову 20 килобайт правил и уметь быстро ими пользоваться в разговорной речи. Ужос!

PS. Если вдруг вы ищете список всех городов и сел с гео-координатами России, Белоруси и Украины - их можно найти в формате csv на сайте https://maps.vlasenko.net/.

Live Demo

Cклонение названий городов

javascript
import { cityIn, cityFrom, cityTo } from 'lvovich';

cityIn(name: string, gender?: GenderStrT): string - в каком городе живете/находитесь? (предложный падеж)

javascript
  cityIn('Санкт-Петербург'); // вернет `Санкт-Петербурге`

cityFrom(name: string, gender?: GenderStrT): string - из какого города приехали? (родительный падеж)

javascript
  cityFrom('Санкт-Петербург'); // вернет `Санкт-Петербурга`

cityTo(name: string): string - в какой город направляетесь? (направительный или посылательный падеж :)

javascript
  cityTo('Санкт-Петербург'); // вернет `Санкт-Петербург`
  cityTo('Москва'); // вернет `Москву`

Определения пола по имени фамилии и отчеству

javascript
import { getGender, getFirstnameGender, getLastnameGender, getMiddlenameGender } from 'lvovich';

Методы определения пола возвращают тип GenderStrT:

  • male - мужской,
  • female - женский,
  • androgynous - может быть и мальчиком и девочкой
  • null - не удалось определить пол

getGender(fio: FioT): ?GenderStrT - передаете ФИО, получаете пол

Входящий аргумент fio являеется объектов со следующими необязательными полями:

javascript
type FioT = {
  first?: ?string,
  last?: ?string,
  middle?: ?string,
}
javascript
  getGender({ last: 'Друзь', first: 'Саша', middle: 'Петрович' }); // вернет `male`
  getGender({ first: 'Саша' }); // вернет `androgynous`, т.к. может быть мальчик или девочка
  getGender({ first: 'Саша', middle: 'Петровна'  }); // вернет `female`
  getGender({ last: 'Абуова', first: 'Андрей' }); // вернет `null`, ну нафиг гадать т.к. вроде фамилия женская и имя мужское.

getFirstnameGender(str: string): ?GenderStrT - вернет пол для Имени

javascript
  getFirstnameGender('Павел'); // вернет `male`
  getFirstnameGender('Анна'); // вернет `female`
  getFirstnameGender('Саша'); // вернет `androgynous`
  getFirstnameGender('аааа'); // вернет `null`

getLastnameGender(str: string): ?GenderStrT - вернет пол для Фамилии

javascript
  getLastnameGender('Градский'); // вернет `male`
  getLastnameGender('Таптыгина'); // вернет `female`
  getLastnameGender('Борейко'); // вернет `androgynous`
  getLastnameGender('аааа'); // вернет `null`

getMiddlenameGender(str: string): ?GenderStrT - вернет пол для Отчества

javascript
  getMiddlenameGender('Павлович'); // вернет `male`
  getMiddlenameGender('Петрова'); // вернет `female`
  getMiddlenameGender('иваново'); // вернет `null`
  getMiddlenameGender('аааа'); // вернет `null`

Cклонения падежей русских имен, фамилий и отчеств

javascript
import { incline, inclineFirstname, inclineLastname, inclineMiddlename } from 'lvovich';

Падежи (тип DeclentionStrT):

  • nominative - именительный (кто? что?)
  • genitive - родительный (кого? чего?)
  • dative - дательный (кому? чему?)
  • accusative - винительный (кого? что?)
  • instrumental - творительный (кем? чем?)
  • prepositional - предложный (о ком? о чем?)

incline(person: LvovichPersonT, declension?: DeclentionStrT): LvovichPersonT - просклонять по падежам

Если не указан declension, то будет использован винительный падеж.

javascript
  incline({ first: 'Саша', last: 'Иванов' }, 'dative');
  // вернет { first: 'Саше', last: 'Иванову', gender: 'male' }

  incline({ first: 'Паша' }, 'instrumental');
  // вернет { first: 'Пашей', gender: 'male' })

Тип LvovichPersonT для incline(person: LvovichPersonT) является объектом с необязательными полями:

javascript
{
  first?: ?string,
  last?: ?string,
  middle?: ?string,
  gender?: ?GenderStrT,
}

inclineFirstname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Имя по падежам

Если пол gender не указан, то будет запущено автоопределение, если не указано склонение declension то будет применен винительный падеж.

javascript
  inclineFirstname('Павел', 'genitive'); // вернет 'Павла'
  inclineFirstname('Женя', 'instrumental'); // вернет 'Женя'
  inclineFirstname('Женя', 'instrumental', 'male'); // вернет 'Женей'
  inclineFirstname('Женя', 'instrumental', 'female'); // вернет 'Женей'

inclineLastname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Фамилию по падежам

javascript
  inclineLastname('Иванова', 'genitive'); // вернет 'Ивановой'
  inclineLastname('Петросян', 'instrumental'); // вернет 'Петросян'
  inclineLastname('Петросян', 'instrumental', 'male'); // вернет 'Петросяном'

inclineMiddlename(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Отчество по падежам

javascript
  inclineMiddlename('Львович', 'genitive'); // вернет 'Львовича'

Установка

Через npm:

bash
npm install lvovich

Или в браузере:

xml

Разработчику

Сборка новой версии пакета происходит автоматически через semantic-release и Travis. Ваши изменения я могу опубликовать хоть с телефона.

От вас просто необходимо склонировать репозиторий, внести изменения в код и открыть Pull Request.

Клонирование репозитория и установка модулей:

bash
git clone https://github.com/nodkz/lvovich.git
cd lvovich
yarn install

Тесты находятся в директории src/__tests__. Запуск тестов:

bash
yarn test

Лицензия

MIT

В основу этого пакета лег код и правила из petrovich-js. Код был переписан и оптимизирован, часть правил была расширена. API полностью был изменен, и стал использовать camelCase.

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

TypeScript

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言