• Stars
    star
    662
  • Rank 65,804 (Top 2 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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

npm codecov coverage Travis npmtrends Commitizen friendly TypeScript compatible

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

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

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

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

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

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

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

Live Demo

Live Demo

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Установка

Через npm:

npm install lvovich

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

<script src="https://cdn.jsdelivr.net/npm/lvovich/dist/lvovich.min.js"></script>
<script>
  var city = 'Москва';
  document.writeln('Найдено в ' + lvovich.cityIn(city) + '<br/>');
  document.writeln('Из ' + lvovich.cityFrom(city) + '<br/>');
  document.writeln('Еду в ' + lvovich.cityTo(city) + '<br/>');
</script>

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

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

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

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

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

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

yarn test

Лицензия

MIT

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

More Repositories

1

mongodb-memory-server

Spinning up mongod in memory for fast tests. If you run tests in parallel this lib helps to spin up dedicated mongodb servers for every test file in MacOS, *nix, Windows or CI environments (in most cases with zero-config).
TypeScript
2,464
star
2

conf-talks

GraphQL на русском — здесь много статей и видео об этой замечательной технологии.
JavaScript
673
star
3

relay-northwind-app

A complex React, Relay, GraphQL demo app. Online demo:
JavaScript
105
star
4

graphql-rules-ru

67
star
5

webpack-plugin-graphql-schema-hot

🔥 Webpack plugin which tracks changes in your schema and generates its introspection in `json` and `txt` formats
JavaScript
66
star
6

mongoose-plugin-autoinc

Mongoose plugin that auto-increments any ID field on your schema every time a document is saved
JavaScript
63
star
7

wrike-graphql

Wrap REST API with GraphQL
TypeScript
37
star
8

example-apollo3

TypeScript
34
star
9

babel-plugin-transform-relay-hot

🔥 BabelRelayPlugin with hot reload
JavaScript
28
star
10

example-apollo2

TypeScript
25
star
11

module-federation-demo

JavaScript
20
star
12

graphql-typescript-boilerplate

TypeScript
14
star
13

mjml-with-images-loader

Converts MJML files with images to HTML and exports them as string or as Nodemailer config.
JavaScript
14
star
14

example-fragments-relay

TypeScript
11
star
15

migrating-from-mongoid-4-to-5

Non-official instruction for migration to Mongoid 5.0.0
5
star
16

graphql-workshop-ru

5
star
17

create-problem

yarn create problem
JavaScript
4
star
18

graphql-workshop-ua

GraphQL Workshop Kyiv (2019-05-11)
JavaScript
3
star
19

php-yandex-search

PHP
3
star
20

graphql-workshop-by

JavaScript
3
star
21

graphql-workshop-client-2020-02

ApolloClient 3, NextJS, SSR, TypeScript, GraphQL Subscriptions, graphql-code-generator
JavaScript
2
star
22

apollo-federation-test

JavaScript
2
star
23

nodkz.github.io

HTML
1
star
24

jest_mocha_mongoose

Jest can not test mongoose
JavaScript
1
star
25

gatsby-remark-use-frontmatter-path

If markdown file has a relative url to another markdown file then url will be replaced by frontmatter path value.
TypeScript
1
star
26

graphql-workshop-2019-11

TypeScript
1
star
27

peek-moped

Take a peek into the Moped (Mongoid) commands made within your Rails application.
Ruby
1
star
28

lingui-express-middleware

TypeScript
1
star
29

kkb-epay

JavaScript
1
star
30

sandbox-typegoose

TypeScript
1
star
31

boilerplate

Node GraphQL API Boilerplate
JavaScript
1
star