From 6d2cb342c4054d9a81a660019588975d816378df Mon Sep 17 00:00:00 2001 From: phungdoanh Date: Fri, 14 Jun 2019 22:02:24 +0700 Subject: [PATCH] Add vietnamese language (#226) * Create vi.js add vietnamese language * Create vi.json * Update vi.js * Update vi.json --- lib/lang/vi.js | 148 ++++++++++++++++++++++++++ test_cases/vi.json | 257 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 405 insertions(+) create mode 100644 lib/lang/vi.js create mode 100644 test_cases/vi.json diff --git a/lib/lang/vi.js b/lib/lang/vi.js new file mode 100644 index 00000000..49b18a5d --- /dev/null +++ b/lib/lang/vi.js @@ -0,0 +1,148 @@ +"use strict"; + +function join_with_shared_prefix(a, b, joiner) { + let i = 0; + + while(i !== a.length && + i !== b.length && + a.charCodeAt(i) === b.charCodeAt(i)) + ++i; + + while(i && a.charCodeAt(i - 1) !== 32) + --i; + + return a.slice(0, i) + a.slice(i) + joiner + b.slice(i); +} + + +module.exports = { + "clear": "quang mây", + "no-precipitation": "không mưa", + "mixed-precipitation": "mưa rải rác", + "possible-very-light-precipitation": "có thể có mưa nhỏ", + "very-light-precipitation": "mưa nhỏ", + "possible-light-precipitation": "có thể có mưa nhẹ", + "light-precipitation": "lượng mưa nhỏ", + "medium-precipitation": "lượng mưa trung bình", + "heavy-precipitation": "lượng mưa lớn", + "possible-very-light-rain": "có thể có mưa phùn", + "very-light-rain": "mưa phùn", + "possible-light-rain": "có thể có mưa nhỏ", + "light-rain": "mưa nhỏ", + "medium-rain": "mưa vừa", + "heavy-rain": "mưa to", + "possible-very-light-sleet": "có thể tuyết rơi nhỏ", + "very-light-sleet": "mưa tuyết nhỏ", + "possible-light-sleet": "có thể có mưa tuyết nhỏ", + "light-sleet": "mưa tuyết nhỏ", + "medium-sleet": "mưa tuyết vừa", + "heavy-sleet": "mưa tuyết to", + "possible-very-light-snow": "có thể có tuyết rơi nhỏ", + "very-light-snow": "tuyết rơi rất nhỏ", + "possible-light-snow": "có thể có tuyết rơi nhỏ", + "light-snow": "tuyết rơi nhỏ", + "medium-snow": "tuyết rơi", + "heavy-snow": "tuyết rơi nhiều", + "possible-thunderstorm": "có thể có dông", + "thunderstorm": "có dông", + "light-wind": "gió nhẹ", + "medium-wind": "có gió", + "heavy-wind": "gió to", + "low-humidity": "trời hanh khô", + "high-humidity": "trời nồm", + "fog": "có sương mù", + "light-clouds": "ít mây", + "medium-clouds": "có mây", + "heavy-clouds": "trời âm u", + "today-morning": "sáng nay", + "later-today-morning": "cuối buổi sáng", + "today-afternoon": "trưa nay", + "later-today-afternoon": "chiều hôm nay", + "today-evening": "chiều tối nay", + "later-today-evening": "tối hôm nay", + "today-night": "đêm nay", + "later-today-night": "nửa đêm", + "tomorrow-morning": "sáng mai", + "tomorrow-afternoon": "trưa mai", + "tomorrow-evening": "chiều tối mai", + "tomorrow-night": "tối mai", + "morning": "buổi sáng", + "afternoon": "buổi chiều", + "evening": "buổi tối", + "night": "đêm", + "today": "hôm nay", + "tomorrow": "ngày mai", + "sunday": "chủ nhật", + "monday": "thứ hai", + "tuesday": "thứ ba", + "wednesday": "thứ tư", + "thursday": "thứ năm", + "friday": "thứ sáu", + "saturday": "thứ bảy", + "next-sunday": "chủ nhật tuần sau", + "next-monday": "thứ hai tuần sau", + "next-tuesday": "thứ ba tuần sau", + "next-wednesday": "thứ tư tuần sau", + "next-thursday": "thứ năm tuần sau", + "next-friday": "thứ sáu tuần sau", + "next-saturday": "thứ bảy tuần sau", + "minutes": "$1 phút", + "fahrenheit": "$1\u00B0F", + "celsius": "$1\u00B0C", + "inches": "$1 in", + "centimeters": "$1 cm", + "less-than": "dưới $1", + "and": function(a, b) { + return join_with_shared_prefix( + a, + b, + a.indexOf(",") !== -1 ? ", và " : " và " + ); + }, + "through": function(a, b) { + return join_with_shared_prefix(a, b, " cho tới "); + }, + "with": "$1, với $2", + "range": "$1\u2013$2", + "parenthetical": function(a, b) { + return a + " (" + b + (a === "mưa rải rác" ? " tuyết)" : ")"); + }, + "for-hour": "$1 trong một giờ", + "starting-in": "$1 bắt đầu sau $2", + "stopping-in": "$1 dừng sau $2", + "starting-then-stopping-later": "$1 bắt đầu sau $2, dừng lại $3 sau", + "stopping-then-starting-later": "$1 dừng sau $2, tiếp tục $3 sau", + "for-day": "$1 suốt cả ngày", + "starting": "$1 bắt đầu lúc $2", + "until": function(condition, period) { + return condition + " cho đến " + period; + }, + "until-starting-again": function(condition, a, b) { + return condition + " cho đến " + a + ", bắt đầu lại " + b; + }, + "starting-continuing-until": function(condition, a, b) { + return condition + " bắt đầu lúc " + a + ", tiếp tục tới " + b; + }, + "during": "$1 vào $2", + "for-week": "$1 cả tuần", + "over-weekend": "$1 suốt cuốt tuần", + "temperatures-peaking": "nhiệt độ đỉnh điểm $1 vào $2", + "temperatures-rising": "nhiệt độ tăng tới $1 vào $2", + "temperatures-valleying": "nhiệt độ thấp nhất $1 vào $2", + "temperatures-falling": "nhiệt độ giảm tới $1 vào $2", + // Capitalize the first letter of every word, except if that word is + // "and". (This is a very crude bastardization of proper English titling + // rules, but it is adequate for the purposes of this module.) + "title": "$1", + // Capitalize the first word of the sentence and end with a period. + "sentence": function(str) { + // Capitalize. + str = str.charAt(0).toUpperCase() + str.slice(1); + + // Add a period if there isn't already one. + if(str.charAt(str.length - 1) !== ".") + str += "."; + + return str; + }, +}; diff --git a/test_cases/vi.json b/test_cases/vi.json new file mode 100644 index 00000000..66c6f748 --- /dev/null +++ b/test_cases/vi.json @@ -0,0 +1,257 @@ +{ + "quang mây": + ["title", "clear"], + + "có thể có mưa nhỏ": + ["title", "possible-very-light-precipitation"], + + "mưa nhỏ": + ["title", "very-light-precipitation"], + + "có thể có mưa nhỏ": + ["title", "possible-light-precipitation"], + + "mưa phùn": + ["title", "light-precipitation"], + + "lượng mưa trung bình": + ["title", "medium-precipitation"], + + "mưa to": + ["title", "heavy-precipitation"], + + "có thể có mưa phùn": + ["title", "possible-very-light-rain"], + + "mưa phùn": + ["title", "very-light-rain"], + + "có thể có mưa nhỏ": + ["title", "possible-light-rain"], + + "mưa nhỏ": + ["title", "light-rain"], + + "mưa vừa": + ["title", "medium-rain"], + + "mưa to": + ["title", "heavy-rain"], + + "có thể có mưa tuyết nhỏ": + ["title", "possible-very-light-sleet"], + + "mưa tuyết nhỏ": + ["title", "very-light-sleet"], + + "có thể có mưa tuyết nhỏ": + ["title", "possible-light-sleet"], + + "mưa tuyết nhỏ": + ["title", "light-sleet"], + + "mưa tuyết vừa": + ["title", "medium-sleet"], + + "mưa tuyết to": + ["title", "heavy-sleet"], + + "có thể có tuyết rơi nhỏ": + ["title", "possible-very-light-snow"], + + "tuyết rơi rất nhỏ": + ["title", "very-light-snow"], + + "có thể có tuyết rơi nhỏ": + ["title", "possible-light-snow"], + + "tuyết rơi nhỏ": + ["title", "light-snow"], + + "tuyết rơi": + ["title", "medium-snow"], + + "tuyết rơi nhiều": + ["title", "heavy-snow"], + + "có gió": + ["title", "medium-wind"], + + "gió to": + ["title", "heavy-wind"], + + "có sương mù": + ["title", "fog"], + + "có mây": + ["title", "medium-clouds"], + + "trời âm u": + ["title", "heavy-clouds"], + + "trời hanh khô và gió nhẹ": + ["title", ["and", "low-humidity", "light-wind"]], + + "mưa phùn và gió to": + ["title", ["and", "very-light-rain", "heavy-wind"]], + + "trời nồm và ít mây": + ["title", ["and", "high-humidity", "light-clouds"]], + + + "Quang mây trong một giờ.": + ["sentence", ["for-hour", "clear"]], + + "Tuyết rơi rất nhỏ bắt đầu sau 35 phút.": + ["sentence", ["starting-in", "very-light-snow", ["minutes", 35]]], + + "Mưa nhỏ dừng sau 15 phút.": + ["sentence", ["stopping-in", "light-rain", ["minutes", 15]]], + + "Mưa tuyết to bắt đầu sau 20 phút, dừng lại 30 phút sau.": + ["sentence", + ["starting-then-stopping-later", + "heavy-sleet", + ["minutes", 20], + ["minutes", 30]]], + + "Mưa vừa dừng sau 25 phút, tiếp tục 8 phút sau.": + ["sentence", + ["stopping-then-starting-later", + "medium-rain", + ["minutes", 25], + ["minutes", 8]]], + + + "Có mây suốt cả ngày.": + ["sentence", ["for-day", "medium-clouds"]], + + "Mưa tuyết nhỏ bắt đầu lúc buổi sáng.": + ["sentence", ["starting", "very-light-sleet", "morning"]], + + "Có gió cho đến đêm nay.": + ["sentence", ["until", "medium-wind", "today-night"]], + + "Lượng mưa lớn cho đến buổi chiều.": + ["sentence", ["until", "heavy-precipitation", "afternoon"]], + + "Gió nhẹ vào buổi chiều.": + ["sentence", ["during", "light-wind", "afternoon"]], + + "Tuyết rơi vào tối hôm nay và sáng mai.": + ["sentence", ["during", + "medium-snow", + ["and", "later-today-evening", "tomorrow-morning"]]], + + "Mưa to cho đến cuối buổi sáng, bắt đầu lại chiều tối nay.": + ["sentence", ["until-starting-again", + "heavy-rain", + "later-today-morning", + "today-evening"]], + + "Trời âm u bắt đầu lúc buổi tối, tiếp tục tới đêm.": + ["sentence", ["starting-continuing-until", + "heavy-clouds", + "evening", + "night"]], + + "Mưa tuyết nhỏ vào chiều hôm nay và có sương mù vào sáng mai.": + ["sentence", ["and", + ["during", "light-sleet", "later-today-afternoon"], + ["during", "fog", "tomorrow-morning"]]], + + "Gió to bắt đầu lúc sáng nay, tiếp tục tới trưa nay, và mưa tuyết vừa vào sáng mai.": + ["sentence", ["and", + ["starting-continuing-until", + "heavy-wind", + "today-morning", + "today-afternoon"], + ["during", "medium-sleet", "tomorrow-morning"]]], + + "Trời âm u bắt đầu lúc nửa đêm và tuyết rơi nhiều vào trưa mai.": + ["sentence", ["and", + ["starting", "heavy-clouds", "later-today-night"], + ["during", "heavy-snow", "tomorrow-afternoon"]]], + + "Trời hanh khô vào đêm nay và lượng mưa nhỏ bắt đầu lúc chiều tối mai, tiếp tục tới tối mai.": + ["sentence", ["and", + ["during", "low-humidity", "today-night"], + ["starting-continuing-until", + "light-precipitation", + "tomorrow-evening", + "tomorrow-night"]]], + + "Tuyết rơi (5 in) vào đêm.": + ["sentence", ["during", + ["parenthetical", "medium-snow", ["inches", 5]], + "night"]], + + "Tuyết rơi nhỏ (2 cm) vào cuối buổi sáng.": + ["sentence", ["during", + ["parenthetical", "light-snow", ["centimeters", 2]], + "later-today-morning"]], + + "Tuyết rơi nhiều (8–12 in) suốt cả ngày.": + ["sentence", ["for-day", + ["parenthetical", "heavy-snow", ["inches", ["range", 8, 12]]]]], + + "Tuyết rơi (dưới 1 cm) vào buổi chiều.": + ["sentence", ["during", + ["parenthetical", "medium-snow", ["less-than", ["centimeters", 1]]], + "afternoon"]], + + + "Không mưa cả tuần, với nhiệt độ đỉnh điểm 85\u00B0F vào ngày mai.": + ["sentence", ["with", + ["for-week", "no-precipitation"], + ["temperatures-peaking", + ["fahrenheit", 85], + "tomorrow"]]], + + "Mưa rải rác suốt cuốt tuần, với nhiệt độ tăng tới 32°C vào thứ năm.": + ["sentence", ["with", + ["over-weekend", "mixed-precipitation"], + ["temperatures-rising", + ["celsius", 32], + "thursday"]]], + + "Mưa phùn vào thứ hai, với nhiệt độ thấp nhất 15°F vào thứ sáu.": + ["sentence", ["with", + ["during", "very-light-rain", "monday"], + ["temperatures-valleying", + ["fahrenheit", 15], + "friday"]]], + + "Tuyết rơi nhỏ vào thứ ba và tư tuần sau, với nhiệt độ giảm tới 0°C vào chủ nhật.": + ["sentence", ["with", + ["during", "light-snow", ["and", "tuesday", "next-wednesday"]], + ["temperatures-falling", + ["celsius", 0], + "sunday"]]], + + "Lượng mưa trung bình vào hôm nay cho tới thứ bảy, với nhiệt độ đỉnh điểm 100°F vào thứ hai.": + ["sentence", ["with", + ["during", + "medium-precipitation", + ["through", "today", "saturday"]], + ["temperatures-peaking", + ["fahrenheit", 100], + "monday"]]], + + "Mưa rải rác (1–3 in tuyết) suốt cả ngày.": + ["sentence", + ["for-day", + ["parenthetical", "mixed-precipitation", ["inches", ["range", 1, 3]]]]], + + "tuyết rơi nhiều (1\u20133 in)": + ["title", ["parenthetical", "heavy-snow", ["inches", ["range", 1, 3]]]], + + "tuyết rơi nhiều (3\u20135 cm)": + ["title", ["parenthetical", "heavy-snow", ["centimeters", ["range", 3, 5]]]], + + "có thể có dông": + ["title", "possible-thunderstorm"], + + "mưa to và có dông": + ["title", ["and", "heavy-rain", "thunderstorm"]] +}