All Projects → Cosmo → GrammaticalNumber

Cosmo / GrammaticalNumber

Licence: MIT License
1️⃣🔜🔢 Turns singular words to the plural and vice-versa in Swift.

Programming Languages

swift
15916 projects

GrammaticalNumber

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.

Usage

Turn singular words to plural

"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

Turn plural words to singular

"children".singularized()           // child
"tables".singularized()             // table
"computers".singularized()          // computer
"mice".singularized()               // mouse
"teeth".singularized()              // tooth
"axes".singularized()               // axis
"women".singularized()              // woman
"grandchildren".singularized()      // grandchild

Case Sensitivity

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

Add count to words

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

Define Custom Rules

Uncountable Rule

let rule: GrammaticalNumberRule = .uncountable("money")

money will never change.

Irregular Rule: Singular from plural

let rule: GrammaticalNumberRule = .irregular("tooth", "teeth")

Turns tooth to teeth when used with pluralized(). Turns teeth to tooth when used with singularized().

Plural Rule: Plural from singular with regular expression

let rule: GrammaticalNumberRule = .plural(#"^(m|l)ouse$"#, #"$1ice"#)

mouse becomes mice and louse becomes lice.

Singular Rule: Singular from plural with regular expression

let rule: GrammaticalNumberRule = .singular(#"(matr)ices$"#, #"$1ix"#)

Turns matrices to matrix.

Apply rule, so it becomes available

GrammaticalNumberRule.add(rule)

Support other languages

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")

Example for the turkish 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

Contact

Other Projects

  • 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.

License

GrammaticalNumber is released under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].