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() // grandchild
GrammaticalNumber
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() // Teeth
Prepends 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 sheep
let 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.