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
- LinkedIn: devranuenal
- BinaryKit — BinaryKit helps you to break down binary data into bits and bytes and easily access specific parts.
- Clippy — Clippy from Microsoft Office is back and runs on macOS! Written in Swift.
- HackMan — Stop writing boilerplate code yourself. Let hackman do it for you via the command line.
- ISO8859 — Convert ISO8859 1-16 Encoded Text to String in Swift. Supports iOS, tvOS, watchOS and macOS.
- SpriteMap — SpriteMap helps you to extract sprites out of a sprite map. Written in Swift.
- StringCase — Converts String to lowerCamelCase, UpperCamelCase and snake_case. Tested and written in Swift.
- TinyConsole — TinyConsole is a micro-console that can help you log and display information inside an iOS application, where having a connection to a development computer is not possible.
GrammaticalNumber is released under the MIT License.