templural
Version:
Template function for plural-sensitive formatting
35 lines (27 loc) • 1.13 kB
text/typescript
import { CategoryFallback, LocalesOptions } from "./locales"
const defaultCategoryPriority: readonly Intl.LDMLPluralRule[] = ['other', 'one', 'two', 'few', 'many', 'zero']
const defaultCategoryOrder: readonly Intl.LDMLPluralRule[] = ['zero', 'one', 'two', 'few', 'many', 'other']
export function resolveCategoryOrders(
pluralCategories: readonly Intl.LDMLPluralRule[],
options?: LocalesOptions,
): CategoryOrders {
const {
categoryPriority = defaultCategoryPriority,
categoryOrder = defaultCategoryOrder
} = options ?? {}
const categories: Intl.LDMLPluralRule[][] = []
categoryPriority
.filter(c => pluralCategories.includes(c))
.forEach(c => {
categories.push(
[...(categories[categories.length - 1] ?? []), c].sort((c1, c2) => categoryOrder.indexOf(c1) - categoryOrder.indexOf(c2))
)
})
return categories
}
export type CategoryOrders = readonly (readonly Intl.LDMLPluralRule[])[]
export type CategoriesConfiguration = {
readonly categories: readonly Intl.LDMLPluralRule[]
readonly categoryOrders: CategoryOrders
readonly categoryFallback: CategoryFallback
}