-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from teogor/feature/plurals-enhancement
Enhance Pluralization Support: Add PluralForms and Rule Implementations
- Loading branch information
Showing
14 changed files
with
1,247 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
# Pluralization Support in Xenoglot | ||
|
||
The `xenoglot-pluralization` module provides tools for handling plural forms of strings. This document | ||
offers a comprehensive overview of how to utilize these features effectively. | ||
|
||
## Creating Plural Forms | ||
|
||
Use the `createPluralForms` function to define templates for various plural categories: | ||
|
||
```kotlin | ||
val pluralForms = createPluralForms( | ||
zeroTemplate = "No items", | ||
oneTemplate = "One item", | ||
twoTemplate = "Two items", | ||
fewTemplate = "%d items", | ||
manyTemplate = "%d items", | ||
otherTemplate = "%d items", | ||
) | ||
``` | ||
|
||
## Methods for Retrieving Quantity Strings | ||
|
||
### `getQuantityString(quantity: Int)` | ||
|
||
Returns the formatted string for the specified quantity. Uses the "other" template if the quantity | ||
does not match any rule. | ||
|
||
```kotlin | ||
val result = pluralForms.getQuantityString(5) // Example: "5 items" | ||
``` | ||
|
||
### `getQuantityStringOrNull(quantity: Int)` | ||
|
||
Returns the formatted string or `null` if the quantity is not handled. | ||
|
||
```kotlin | ||
val result = pluralForms.getQuantityStringOrNull(-1) // Example: null | ||
``` | ||
|
||
### `getQuantityStringOrElse(quantity: Int, fallback: String)` | ||
|
||
Returns the formatted string or a fallback string if the quantity is not handled. | ||
|
||
```kotlin | ||
val result = pluralForms.getQuantityStringOrElse(-1, "Unknown") // Example: "Unknown" | ||
``` | ||
|
||
### `getQuantityStringOrThrow(quantity: Int)` | ||
|
||
Returns the formatted string or throws an exception if the quantity is not handled. | ||
|
||
```kotlin | ||
val result = pluralForms.getQuantityStringOrThrow(1) // Example: "One item" | ||
``` | ||
|
||
## Example Usage | ||
|
||
Here’s how you can use these methods in practice: | ||
|
||
```kotlin | ||
val pluralForms = createPluralForms( | ||
zeroTemplate = "No items", | ||
oneTemplate = "One item", | ||
twoTemplate = "Two items", | ||
fewTemplate = "%d items", | ||
manyTemplate = "%d items", | ||
otherTemplate = "%d items", | ||
) | ||
|
||
println(pluralForms.getQuantityString(0)) // Output: "No items" | ||
println(pluralForms.getQuantityString(1)) // Output: "One item" | ||
println(pluralForms.getQuantityString(2)) // Output: "Two items" | ||
println(pluralForms.getQuantityString(5)) // Output: "5 items" | ||
println(pluralForms.getQuantityString(11)) // Output: "11 items" | ||
|
||
println(pluralForms.getQuantityStringOrNull(-1)) // Output: null | ||
println(pluralForms.getQuantityStringOrElse(-1, "Unknown")) // Output: "Unknown" | ||
``` | ||
|
||
This module helps in managing pluralized strings effectively, ensuring accurate representation | ||
across different quantities. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/build |
72 changes: 72 additions & 0 deletions
72
xenoglot-pluralization/api/android/xenoglot-pluralization.api
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
public final class dev/teogor/xenoglot/pluralization/FewRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/ManyRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/OneRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/OtherRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralForms { | ||
public fun <init> (Ljava/util/List;)V | ||
public final fun copy (Ljava/util/List;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
public static synthetic fun copy$default (Ldev/teogor/xenoglot/pluralization/PluralForms;Ljava/util/List;ILjava/lang/Object;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
public fun equals (Ljava/lang/Object;)Z | ||
public final fun getQuantityString (I)Ljava/lang/String; | ||
public final fun getQuantityStringOrElse (ILjava/lang/String;)Ljava/lang/String; | ||
public static synthetic fun getQuantityStringOrElse$default (Ldev/teogor/xenoglot/pluralization/PluralForms;ILjava/lang/String;ILjava/lang/Object;)Ljava/lang/String; | ||
public final fun getQuantityStringOrNull (I)Ljava/lang/String; | ||
public final fun getQuantityStringOrThrow (I)Ljava/lang/String; | ||
public fun hashCode ()I | ||
public fun toString ()Ljava/lang/String; | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralFormsKt { | ||
public static final fun createPluralForms (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
} | ||
|
||
public abstract interface class dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public abstract fun getTemplate ()Ljava/lang/String; | ||
public abstract fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralizationRuleKt { | ||
public static final fun createPluralizationRules (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; | ||
} | ||
|
||
public abstract interface class dev/teogor/xenoglot/pluralization/PluralizationTemplates { | ||
public abstract fun getFewTemplate ()Ljava/lang/String; | ||
public abstract fun getManyTemplate ()Ljava/lang/String; | ||
public abstract fun getOneTemplate ()Ljava/lang/String; | ||
public abstract fun getOtherTemplate ()Ljava/lang/String; | ||
public abstract fun getTwoTemplate ()Ljava/lang/String; | ||
public abstract fun getZeroTemplate ()Ljava/lang/String; | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/TwoRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/ZeroRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
public final class dev/teogor/xenoglot/pluralization/FewRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/ManyRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/OneRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/OtherRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralForms { | ||
public fun <init> (Ljava/util/List;)V | ||
public final fun copy (Ljava/util/List;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
public static synthetic fun copy$default (Ldev/teogor/xenoglot/pluralization/PluralForms;Ljava/util/List;ILjava/lang/Object;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
public fun equals (Ljava/lang/Object;)Z | ||
public final fun getQuantityString (I)Ljava/lang/String; | ||
public final fun getQuantityStringOrElse (ILjava/lang/String;)Ljava/lang/String; | ||
public static synthetic fun getQuantityStringOrElse$default (Ldev/teogor/xenoglot/pluralization/PluralForms;ILjava/lang/String;ILjava/lang/Object;)Ljava/lang/String; | ||
public final fun getQuantityStringOrNull (I)Ljava/lang/String; | ||
public final fun getQuantityStringOrThrow (I)Ljava/lang/String; | ||
public fun hashCode ()I | ||
public fun toString ()Ljava/lang/String; | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralFormsKt { | ||
public static final fun createPluralForms (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ldev/teogor/xenoglot/pluralization/PluralForms; | ||
} | ||
|
||
public abstract interface class dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public abstract fun getTemplate ()Ljava/lang/String; | ||
public abstract fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/PluralizationRuleKt { | ||
public static final fun createPluralizationRules (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; | ||
} | ||
|
||
public abstract interface class dev/teogor/xenoglot/pluralization/PluralizationTemplates { | ||
public abstract fun getFewTemplate ()Ljava/lang/String; | ||
public abstract fun getManyTemplate ()Ljava/lang/String; | ||
public abstract fun getOneTemplate ()Ljava/lang/String; | ||
public abstract fun getOtherTemplate ()Ljava/lang/String; | ||
public abstract fun getTwoTemplate ()Ljava/lang/String; | ||
public abstract fun getZeroTemplate ()Ljava/lang/String; | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/TwoRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
||
public final class dev/teogor/xenoglot/pluralization/ZeroRule : dev/teogor/xenoglot/pluralization/PluralizationRule { | ||
public fun <init> (Ljava/lang/String;)V | ||
public fun getTemplate ()Ljava/lang/String; | ||
public fun matches (I)Z | ||
} | ||
|
Oops, something went wrong.