diff options
Diffstat (limited to 'date-fns/src/locale/vi/_lib/localize/index.js')
-rw-r--r-- | date-fns/src/locale/vi/_lib/localize/index.js | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/date-fns/src/locale/vi/_lib/localize/index.js b/date-fns/src/locale/vi/_lib/localize/index.js new file mode 100644 index 0000000..07dbe80 --- /dev/null +++ b/date-fns/src/locale/vi/_lib/localize/index.js @@ -0,0 +1,295 @@ +import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index' + +// Vietnamese locale reference: http://www.localeplanet.com/icu/vi-VN/index.html +// Capitalization reference: http://hcmup.edu.vn/index.php?option=com_content&view=article&id=4106%3Avit-hoa-trong-vn-bn-hanh-chinh&catid=2345%3Atham-kho&Itemid=4103&lang=vi&site=134 + +var eraValues = { + narrow: ['TCN', 'SCN'], + abbreviated: ['trước CN', 'sau CN'], + wide: ['trước Công Nguyên', 'sau Công Nguyên'] +} + +var quarterValues = { + narrow: ['1', '2', '3', '4'], + abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], + wide: ['Quý 1', 'Quý 2', 'Quý 3', 'Quý 4'] +} + +var formattingQuarterValues = { + narrow: ['1', '2', '3', '4'], + abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'], + // I notice many news outlet use this "quý II/2018" + wide: ['quý I', 'quý II', 'quý III', 'quý IV'] +} + +// 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. +var monthValues = { + narrow: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + abbreviated: [ + 'Thg 1', + 'Thg 2', + 'Thg 3', + 'Thg 4', + 'Thg 5', + 'Thg 6', + 'Thg 7', + 'Thg 8', + 'Thg 9', + 'Thg 10', + 'Thg 11', + 'Thg 12' + ], + wide: [ + 'Tháng Một', + 'Tháng Hai', + 'Tháng Ba', + 'Tháng Tư', + 'Tháng Năm', + 'Tháng Sáu', + 'Tháng Bảy', + 'Tháng Tám', + 'Tháng Chín', + 'Tháng Mười', + 'Tháng Mười Một', + 'Tháng Mười Hai' + ] +} +// In Vietnamese date formatting, month number less than 10 expected to have leading zero +var formattingMonthValues = { + narrow: [ + '01', + '02', + '03', + '04', + '05', + '06', + '07', + '08', + '09', + '10', + '11', + '12' + ], + abbreviated: [ + 'thg 1', + 'thg 2', + 'thg 3', + 'thg 4', + 'thg 5', + 'thg 6', + 'thg 7', + 'thg 8', + 'thg 9', + 'thg 10', + 'thg 11', + 'thg 12' + ], + wide: [ + 'tháng 01', + 'tháng 02', + 'tháng 03', + 'tháng 04', + 'tháng 05', + 'tháng 06', + 'tháng 07', + 'tháng 08', + 'tháng 09', + 'tháng 10', + 'tháng 11', + 'tháng 12' + ] +} + +var dayValues = { + narrow: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + short: ['CN', 'Th 2', 'Th 3', 'Th 4', 'Th 5', 'Th 6', 'Th 7'], + abbreviated: ['CN', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'], + wide: [ + 'Chủ Nhật', + 'Thứ Hai', + 'Thứ Ba', + 'Thứ Tư', + 'Thứ Năm', + 'Thứ Sáu', + 'Thứ Bảy' + ] +} + +// Vietnamese are used to AM/PM borrowing from English, hence `narrow` and +// `abbreviated` are just like English but I'm leaving the `wide` +// format being localized with abbreviations found in some systems (SÁng / CHiều); +// however, personally, I don't think `Chiều` sounds appropriate for `PM` +var dayPeriodValues = { + // narrow date period is extremely rare in Vietnamese + // I used abbreviated form for noon, morning and afternoon + // which are regconizable by Vietnamese, others cannot be any shorter + narrow: { + am: 'am', + pm: 'pm', + midnight: 'nửa đêm', + noon: 'tr', + morning: 'sg', + afternoon: 'ch', + evening: 'tối', + night: 'đêm' + }, + abbreviated: { + am: 'AM', + pm: 'PM', + midnight: 'nửa đêm', + noon: 'trưa', + morning: 'sáng', + afternoon: 'chiều', + evening: 'tối', + night: 'đêm' + }, + wide: { + am: 'SA', + pm: 'CH', + midnight: 'nửa đêm', + noon: 'trưa', + morning: 'sáng', + afternoon: 'chiều', + evening: 'tối', + night: 'đêm' + } +} + +var formattingDayPeriodValues = { + narrow: { + am: 'am', + pm: 'pm', + midnight: 'nửa đêm', + noon: 'tr', + morning: 'sg', + afternoon: 'ch', + evening: 'tối', + night: 'đêm' + }, + abbreviated: { + am: 'AM', + pm: 'PM', + midnight: 'nửa đêm', + noon: 'trưa', + morning: 'sáng', + afternoon: 'chiều', + evening: 'tối', + night: 'đêm' + }, + wide: { + am: 'SA', + pm: 'CH', + midnight: 'nửa đêm', + noon: 'giữa trưa', + morning: 'vào buổi sáng', + afternoon: 'vào buổi chiều', + evening: 'vào buổi tối', + night: 'vào ban đêm' + } +} + +// If ordinal numbers depend on context, for example, +// if they are different for different grammatical genders, +// use `options.unit`: +// +// var options = dirtyOptions || {} +// var unit = String(options.unit) +// +// where `unit` can be 'month', 'quarter', 'week', 'isoWeek', 'dayOfYear', +// 'dayOfMonth' or 'dayOfWeek' +function ordinalNumber(dirtyNumber, dirtyOptions) { + var options = dirtyOptions || {} + var unit = String(options.unit) + var number = parseInt(dirtyNumber, 10) + + if (unit === 'quarter') { + // many news outlets use "quý I"... + switch (number) { + case 1: + return 'I' + case 2: + return 'II' + case 3: + return 'III' + case 4: + return 'IV' + } + } else if (unit === 'day') { + // day of week in Vietnamese has ordinal number meaning, + // so we should use them, else it'll sound weird + switch (number) { + case 1: + return 'thứ 2' // meaning 2nd day but it's the first day of the week :D + case 2: + return 'thứ 3' // meaning 3rd day + case 3: + return 'thứ 4' // meaning 4th day and so on + case 4: + return 'thứ 5' + case 5: + return 'thứ 6' + case 6: + return 'thứ 7' + case 7: + return 'chủ nhật' // meaning Sunday, there's no 8th day :D + } + } else if (unit === 'week') { + if (number === 1) { + return 'thứ nhất' + } else { + return 'thứ ' + number + } + } else if (unit === 'dayOfYear') { + if (number === 1) { + return 'đầu tiên' + } else { + return 'thứ ' + number + } + } + + // there are no different forms of ordinal numbers in Vietnamese + return number +} + +var localize = { + ordinalNumber: ordinalNumber, + + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: 'wide' + }), + + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: 'wide', + formattingValues: formattingQuarterValues, + defaultFormattingWidth: 'wide', + argumentCallback: function(quarter) { + return Number(quarter) - 1 + } + }), + + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: 'wide', + formattingValues: formattingMonthValues, + defaultFormattingWidth: 'wide' + }), + + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: 'wide' + }), + + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: 'wide', + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: 'wide' + }) +} + +export default localize |