summaryrefslogtreecommitdiff
path: root/date-fns/src/locale/vi/_lib/localize/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/src/locale/vi/_lib/localize/index.js')
-rw-r--r--date-fns/src/locale/vi/_lib/localize/index.js295
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