forked from lingui/js-lingui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
select.js
54 lines (45 loc) · 1.05 KB
/
select.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* @flow */
import { number } from "./formats"
type PluralForms = {
zero?: string,
one?: string,
two?: string,
few?: string,
many?: string,
other: string
}
type PluralProps = {
value: number,
offset?: number,
locales?: string,
options?: {}
} & PluralForms
declare var Intl: {
NumberFormat: any
}
const _plural = type => (i18n: any) => ({
value,
offset = 0,
locales = i18n.locales || i18n.language,
options,
other,
...pluralForms
}: PluralProps): string => {
const diff = value - offset
const diffAsString = number(locales, options)(diff)
const translation =
pluralForms[value.toString()] || // exact match
pluralForms[i18n.pluralForm(diff, type)] || // plural form
other // fallback
return translation.replace("#", diffAsString)
}
const plural = _plural("cardinal")
const selectOrdinal = _plural("ordinal")
type SelectProps = {
value: string,
other: string
}
function select({ value, other, ...selectForms }: SelectProps): string {
return selectForms[value] || other
}
export { plural, select, selectOrdinal }