lvovich
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.16 • Public • Published

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

    npm codecov coverage Travis npmtrends Commitizen friendly TypeScript compatible FlowType compatible

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

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

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

    • для генерации красивых писем с 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.

    Install

    npm i lvovich

    DownloadsWeekly Downloads

    1,420

    Version

    1.0.16

    License

    MIT

    Unpacked Size

    285 kB

    Total Files

    60

    Last publish

    Collaborators

    • nodkz