Skip to content
The official .NET/C# port of Petrovich.
C# PowerShell Batchfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Remove ilmerge from build. Add nuget dependencies May 31, 2018
doc add new project dirs Oct 20, 2013
nuget Remove ilmerge from build. Add nuget dependencies May 31, 2018
src Bump YamlDotNet from 4.0.0 to 5.0.0 in /src/NPetrovich Oct 31, 2019
tools clean up build scripts Jul 11, 2014
.gitignore Увеличил, прозводительность, добавив статичный лоадер. Dec 25, 2016
.gitmodules use rules from petrovich submodule Oct 30, 2013
LICENSE Initial commit Oct 10, 2013 Обновил описание Dec 21, 2016
build.ps1 Remove ilmerge from build. Add nuget dependencies May 31, 2018
petrovich.png add Petrovich icon Oct 20, 2013
psake.ps1 clean up build scripts Jul 11, 2014

Petrovich NPetrovich

NPetrovich is library which inflects Russian names to given grammatical case. It supports first names, last names and middle names inflections.

NPetrovich is C#/.NET implementation of Petrovich ruby gem.

Build status



PM> Install-Package NPetrovich


Just reference NPetrovich dll to your project.


Run psake.ps1 script with Powershell to build solution. You can find output binaries in the bin directory.


Basic usage

var petrovich = new Petrovich()
		FirstName = "Иван",
		LastName = "Иванов",
		MiddleName = "Иванович",
		Gender = Gender.Male

// Inflect all properties
var inflected = petrovich.InflectTo(Case.Dative);

System.Console.WriteLine(inflected.FirstName); // Ивану
System.Console.WriteLine(inflected.LastName); // Иванову
System.Console.WriteLine(inflected.MiddleName); // Ивановичу

inflected = petrovich.InflectTo(Case.Instrumental);

System.Console.WriteLine(inflected.FirstName); // Иваном
System.Console.WriteLine(inflected.LastName); // Ивановым
System.Console.WriteLine(inflected.MiddleName); // Ивановичем

// Inflect each property
System.Console.WriteLine(petrovich.InflectFirstNameTo(Case.Genitive)); // Ивана
System.Console.WriteLine(petrovich.InflectLastNameTo(Case.Genitive)); // Иванова
System.Console.WriteLine(petrovich.InflectMiddleNameTo(Case.Genitive)); // Ивановича

You can use automatic gender detection based on middle name or first and last names, if the middle name not determinates gender:

var petrovich = new Petrovich()
        FirstName = "Иван",
        LastName = "Иванов",
        MiddleName = "Иванович",
        AutoDetectGender = true

System.Console.WriteLine(petrovich.Gender); // Male

Also you can use GenderUtils to detect gender based on middle name:

Gender gender = GenderUtils.Detect("Иванович");
System.Console.WriteLine(gender); // Male

Advanced usage

You can use your own rules loader which implements IRulesLoader interface:

IRulesLoader customLoader = new CustomRulesLoader();
var petrovich = new Petrovich(customLoader);


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

You can also support project by reporting issues or suggesting new features and improvements.

To be done

  • Add documentation
  • Add comments to the code
You can’t perform that action at this time.