Skip to content

Commit

Permalink
Add Hindi (hi) locale support (#1409) (closes #1408)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mukesh Mandiwal authored and kossnocorp committed Sep 12, 2019
1 parent 4695163 commit 30f2316
Show file tree
Hide file tree
Showing 12 changed files with 936 additions and 0 deletions.
96 changes: 96 additions & 0 deletions src/locale/hi/_lib/formatDistance/index.js
@@ -0,0 +1,96 @@
import localize from '../localize/index.js'
// Source: https://www.unicode.org/cldr/charts/32/summary/hi.html
var formatDistanceLocale = {
lessThanXSeconds: {
one: '१ सेकंड से कम', // CLDR #1310
other: '{{count}} सेकंड से कम'
},

xSeconds: {
one: '१ सेकंड',
other: '{{count}} सेकंड'
},

halfAMinute: 'आधा मिनट',

lessThanXMinutes: {
one: '१ मिनट से कम',
other: '{{count}} मिनट से कम'
},

xMinutes: {
one: '१ मिनट', // CLDR #1307
other: '{{count}} मिनट'
},

aboutXHours: {
one: 'लगभग १ घंटा',
other: 'लगभग {{count}} घंटे'
},

xHours: {
one: '१ घंटा', // CLDR #1304
other: '{{count}} घंटे' // CLDR #4467
},

xDays: {
one: '१ दिन', // CLDR #1286
other: '{{count}} दिन'
},

aboutXMonths: {
one: 'लगभग १ महीना',
other: 'लगभग {{count}} महीने'
},

xMonths: {
one: '१ महीना',
other: '{{count}} महीने'
},

aboutXYears: {
one: 'लगभग १ वर्ष',
other: 'लगभग {{count}} वर्ष' // CLDR #4823
},

xYears: {
one: '१ वर्ष',
other: '{{count}} वर्ष'
},

overXYears: {
one: '१ वर्ष से अधिक',
other: '{{count}} वर्ष से अधिक'
},

almostXYears: {
one: 'लगभग १ वर्ष',
other: 'लगभग {{count}} वर्ष'
}
}

export default function formatDistance(token, count, options) {
options = options || {}

var result
if (typeof formatDistanceLocale[token] === 'string') {
result = formatDistanceLocale[token]
} else if (count === 1) {
result = formatDistanceLocale[token].one
} else {
result = formatDistanceLocale[token].other.replace(
'{{count}}',
localize.numberToLocale(count)
)
}

if (options.addSuffix) {
if (options.comparison > 0) {
return result + 'मे '
} else {
return result + ' पहले'
}
}

return result
}
41 changes: 41 additions & 0 deletions src/locale/hi/_lib/formatLong/index.js
@@ -0,0 +1,41 @@
import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'

var dateFormats = {
full: 'EEEE, do MMMM, y', // CLDR #1787
long: 'do MMMM, y', // CLDR #1788
medium: 'd MMM, y', // CLDR #1789
short: 'dd/MM/yyyy' // CLDR #1790
}

var timeFormats = {
full: 'h:mm:ss a zzzz', // CLDR #1791
long: 'h:mm:ss a z', // CLDR #1792
medium: 'h:mm:ss a', // CLDR #1793
short: 'h:mm a' // CLDR #1794
}

var dateTimeFormats = {
full: "{{date}} 'को' {{time}}", // CLDR #1795
long: "{{date}} 'को' {{time}}", // CLDR #1796
medium: '{{date}}, {{time}}', // CLDR #1797
short: '{{date}}, {{time}}' // CLDR #1798
}

var formatLong = {
date: buildFormatLongFn({
formats: dateFormats,
defaultWidth: 'full'
}),

time: buildFormatLongFn({
formats: timeFormats,
defaultWidth: 'full'
}),

dateTime: buildFormatLongFn({
formats: dateTimeFormats,
defaultWidth: 'full'
})
}

export default formatLong
12 changes: 12 additions & 0 deletions src/locale/hi/_lib/formatRelative/index.js
@@ -0,0 +1,12 @@
var formatRelativeLocale = {
lastWeek: "'पिछले' eeee p",
yesterday: "'कल' p",
today: "'आज' p",
tomorrow: "'कल' p",
nextWeek: "eeee 'को' p",
other: 'P'
}

export default function formatRelative(token, _date, _baseDate, _options) {
return formatRelativeLocale[token]
}
244 changes: 244 additions & 0 deletions src/locale/hi/_lib/localize/index.js
@@ -0,0 +1,244 @@
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'

var numberValues = {
locale: {
'1': '१',
'2': '२',
'3': '३',
'4': '४',
'5': '५',
'6': '६',
'7': '७',
'8': '८',
'9': '९',
'0': '०'
},
number: {
'१': '1',
'२': '2',
'३': '3',
'४': '4',
'५': '5',
'६': '6',
'७': '7',
'८': '8',
'९': '9',
'०': '0'
}
}

// CLDR #1585 - #1592
var eraValues = {
narrow: ['ईसा-पूर्व', 'ईस्वी'],
abbreviated: ['ईसा-पूर्व', 'ईस्वी'],
wide: ['ईसा-पूर्व', 'ईसवी सन']
}
// CLDR #1593 - #1616
var quarterValues = {
narrow: ['1', '2', '3', '4'],
abbreviated: ['ति1', 'ति2', 'ति3', 'ति4'],
wide: ['पहली तिमाही', 'दूसरी तिमाही', 'तीसरी तिमाही', 'चौथी तिमाही']
}

// Note: in English, the names of days of the week and months are capitalized.
// If you are making a new locale based on this one, check if the same is true for the language you're working on.
// Generally, formatted dates should look like they are in the middle of a sentence,
// e.g. in Spanish language the weekdays and months should be in the lowercase.
// https://www.unicode.org/cldr/charts/32/summary/hi.html
// CLDR #1617 - #1688
var monthValues = {
narrow: [
'ज',
'फ़',
'मा',
'अ',
'मई',
'जू',
'जु',
'अग',
'सि',
'अक्तू',
'न',
'दि'
],
abbreviated: [
'जन',
'फ़र',
'मार्च',
'अप्रैल',
'मई',
'जून',
'जुल',
'अग',
'सित',
'अक्तू',
'नव',
'दिस'
],
wide: [
'जनवरी',
'फ़रवरी',
'मार्च',
'अप्रैल',
'मई',
'जून',
'जुलाई',
'अगस्त',
'सितंबर',
'अक्तूबर',
'नवंबर',
'दिसंबर'
]
}

// CLDR #1689 - #1744
var dayValues = {
narrow: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],
short: ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],
abbreviated: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],
wide: [
'रविवार',
'सोमवार',
'मंगलवार',
'बुधवार',
'गुरुवार',
'शुक्रवार',
'शनिवार'
]
}

var dayPeriodValues = {
narrow: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
},
abbreviated: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
},
wide: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
}
}
var formattingDayPeriodValues = {
narrow: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
},
abbreviated: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
},
wide: {
am: 'पूर्वाह्न',
pm: 'अपराह्न',
midnight: 'मध्यरात्रि',
noon: 'दोपहर',
morning: 'सुबह',
afternoon: 'दोपहर',
evening: 'शाम',
night: 'रात'
}
}

function ordinalNumber(dirtyNumber) {
var number = localize.localeToNumber(dirtyNumber)
var localeNumber = localize.numberToLocale(number)

var rem10 = number % 10
switch (rem10) {
case 2:
case 3:
case 4:
case 6:
case 1:
case 5:
case 7:
case 8:
case 9:
case 0:
return localeNumber
}
}

function localeToNumber(locale) {
var number = locale.toString().replace(/[१२३४५६७८९०]/g, function(match) {
return numberValues.number[match]
})
return Number(number)
}

function numberToLocale(number) {
return number.toString().replace(/\d/g, function(match) {
return numberValues.locale[match]
})
}

var localize = {
localeToNumber: localeToNumber,
numberToLocale: numberToLocale,
ordinalNumber: ordinalNumber,

era: buildLocalizeFn({
values: eraValues,
defaultWidth: 'wide'
}),

quarter: buildLocalizeFn({
values: quarterValues,
defaultWidth: 'wide',
argumentCallback: function(quarter) {
return Number(quarter) - 1
}
}),

month: buildLocalizeFn({
values: monthValues,
defaultWidth: 'wide'
}),

day: buildLocalizeFn({
values: dayValues,
defaultWidth: 'wide'
}),

dayPeriod: buildLocalizeFn({
values: dayPeriodValues,
defaultWidth: 'wide',
formattingValues: formattingDayPeriodValues,
defaultFormattingWidth: 'wide'
})
}

export default localize

0 comments on commit 30f2316

Please sign in to comment.