Много лет назад, когда проект Teampass назывался cpassman, в нём был косяк с локализацией интерфейса. Если в Web UI было несколько папок, то в английской версии было написано: “34 Folders”, а в русской – “34 Папкаs”. Это было очень смешно.
Действительно, в английском всё просто: есть единственное и множественное число. И всё. В русском, не будь он могуч, ситуация несколько сложнее:
- 21 папка;
- 44 папки;
- 17 папок.
Окончания пляшут, как им вздумается. К счастью, изобретать велосипед не нужно. Логика формирования окончания описана и доступна для всех языков: http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html
Вооружившись Powershell, перекладываем логику на бумагу:
Function Get-PluralForm() {Param([int]$num,[string]$pf1,[string]$pf2,[string]$pf3)
switch($num) {
{$num%10 -eq 1 -and $num%100 -ne 11} {"$num $pf1"}
{$num%10 -ge 2 -and $num%10 -le 4 -and ($num%100 -le 10 -or $num%100 -ge 20)} {"$num $pf2"}
Default {"$num $pf3"}
}
}
И получаем результат:
PS C:\> Get-PluralForm 22 день дня дней
22 дня
Сниппет прекрасно ложится на любой код. А главное, экономит нервные клетки перфекционистов. Если вы понимаете, о чём я 😉