Turning singular words to plural can be very hard in some spoken languages, while other languages have simple rules.
GrammaticalNumber is heavily inspired by ActiveSupport::Inflector known from the Ruby on Rails web framework.
"person".pluralized() // people
"center".pluralized() // centers
"sheep".pluralized() // sheep
"knife".pluralized() // knives
"mouse".pluralized() // mice
"money".pluralized() // money
"axis".pluralized() // axes
"item".pluralized() // items
"status".pluralized() // statuses
"fox".pluralized() // foxes
"move".pluralized() // moves
"tooth".pluralized() // teeth
"foxes".pluralized() // foxes
"millennium".pluralized() // millennia
"child".pluralized() // children
"matrix".pluralized() // matrices
"man".pluralized() // men
"ox".pluralized() // oxen
"radius".pluralized() // radii
"grandchild".pluralized() // grandchildren"children".singularized() // child
"tables".singularized() // table
"computers".singularized() // computer
"mice".singularized() // mouse
"teeth".singularized() // tooth
"axes".singularized() // axis
"women".singularized() // woman
"grandchildren".singularized() // grandchildGrammaticalNumber will try to match the letter casing of your input word.
Lowercased, uppercased and capitalized words are supported.
"tooth".pluralized() // teeth
"TOOTH".pluralized() // TOOTH
"Tooth".pluralized() // TeethPrepends the pluralized String with count.
If the count is 0, the singular word will be used.
"child".pluralized(count: 0) // 0 children
"child".pluralized(count: 1) // 1 child
"child".pluralized(count: 3) // 3 children
"knife".pluralized(count: 0) // 0 knives
"knife".pluralized(count: 1) // 1 knife
"knife".pluralized(count: 3) // 3 knives
"sheep".pluralized(count: 0) // 0 sheep
"sheep".pluralized(count: 1) // 1 sheep
"sheep".pluralized(count: 3) // 3 sheeplet rule: GrammaticalNumberRule = .uncountable("money")money will never change.
let rule: GrammaticalNumberRule = .irregular("tooth", "teeth")Turns tooth to teeth when used with pluralized().
Turns teeth to tooth when used with singularized().
let rule: GrammaticalNumberRule = .plural(#"^(m|l)ouse$"#, #"$1ice"#)mouse becomes mice and louse becomes lice.
let rule: GrammaticalNumberRule = .singular(#"(matr)ices$"#, #"$1ix"#)Turns matrices to matrix.
GrammaticalNumberRule.add(rule)In order to support other languages, pass the language parameter to your custom rules.
Call .pluralized(language: yourLanguage) with the same language value — like so: .pluralized(language: "tr")
GrammaticalNumberRule.add(.plural(#"([aoıu][^aoıueöiü]{0,6})$"#, #"$1lar"#), language: "tr")
GrammaticalNumberRule.add(.plural(#"([eöiü][^aoıueöiü]{0,6})$"#, #"$1ler"#), language: "tr")
GrammaticalNumberRule.add(.singular(#"l[ae]r$"#, #""#), language: "tr")"kitap".pluralized(language: "tr") // kitaplar
"yemek".pluralized(language: "tr") // yemekler- Devran "Cosmo" Uenal
- Twitter: @maccosmo
GrammaticalNumber is released under the MIT License.