Subsonic 3 имеет класс Inflector
, который поразил меня, превратив Person
в People
. Я посмотрел на источник и обнаружил, что он немного обманывает с помощью жестко закодированного списка, но это действительно единственный способ сделать это на английском и то, как люди это делают - мы помним единственное и множественное число каждого слова и не просто применяем правило , Поскольку нет никакого мужского / женского (/ нейтрального), чтобы добавить к соединению, это намного проще.
Вот фрагмент:
AddSingularRule("^(ox)en", "$1");
AddSingularRule("(vert|ind)ices$", "$1ex");
AddSingularRule("(matr)ices$", "$1ix");
AddSingularRule("(quiz)zes$", "$1");
AddIrregularRule("person", "people");
AddIrregularRule("man", "men");
AddIrregularRule("child", "children");
AddIrregularRule("sex", "sexes");
AddIrregularRule("tax", "taxes");
AddIrregularRule("move", "moves");
AddUnknownCountRule("equipment");
Это объясняет некоторые слова, не имеющие множественных эквивалентов, например, пример оборудования. Как вы, вероятно, можете сказать, он просто заменяет Regex
на $ 1.
Обновление:
Похоже, что Subsonic Inflector
на самом деле Castle ActiveRecord Inflector
класс!