Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/web/src/components/LanguageSwitcher.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const LANGUAGES = [
{ code: "fr", label: "common:language.fr" },
{ code: "it", label: "common:language.it" },
{ code: "ja", label: "common:language.ja" },
{ code: "vi", label: "common:language.vi" },
]

const LanguageSwitcher = () => {
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/de/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - Spanisch",
"fr": "Français - Französisch",
"it": "Italiano - Italienisch",
"ja": "日本語 - Japanisch"
"ja": "日本語 - Japanisch",
"vi": "Tiếng Việt - Vietnamesisch"
},
"loading": "Laden...",
"next": "Weiter",
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - Spanish",
"fr": "Français - French",
"it": "Italiano - Italian",
"ja": "日本語 - Japanese"
"ja": "日本語 - Japanese",
"vi": "Tiếng Việt - Vietnamese"
},
"loading": "Loading...",
"next": "Next",
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/es/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - Español",
"fr": "Français - Francés",
"it": "Italiano - Italiano",
"ja": "日本語 - Japonés"
"ja": "日本語 - Japonés",
"vi": "Tiếng Việt - Vietnamita"
},
"loading": "Cargando...",
"next": "Siguiente",
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/fr/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - Espagnol",
"fr": "Français - Français",
"it": "Italiano - Italien",
"ja": "日本語 - Japonais"
"ja": "日本語 - Japonais",
"vi": "Tiếng Việt - Vietnamien"
},
"loading": "Chargement...",
"next": "Suivant",
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/it/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - Spagnolo",
"fr": "Français - Francese",
"it": "Italiano - Italiano",
"ja": "日本語 - Giapponese"
"ja": "日本語 - Giapponese",
"vi": "Tiếng Việt - Vietnamita"
},
"loading": "Caricamento...",
"next": "Avanti",
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/locales/ja/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"es": "Español - スペイン語",
"fr": "Français - フランス語",
"it": "Italiano - イタリア語",
"ja": "日本語 - 日本語"
"ja": "日本語 - 日本語",
"vi": "Tiếng Việt - ベトナム語"
},
"loading": "読み込み中...",
"next": "次へ",
Expand Down
25 changes: 25 additions & 0 deletions packages/web/src/locales/vi/common.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"cancel": "Hủy",
"confirm": "Xác nhận",
"connecting": "Đang kết nối...",
"delete": "Xóa",
"exit": "Thoát",
"exitFullscreen": "Thoát toàn màn hình",
"fullscreen": "Toàn màn hình",
"language": {
"de": "Deutsch - Tiếng Đức",
"en": "English - Tiếng Anh",
"es": "Español - Tiếng Tây Ban Nha",
"fr": "Français - Tiếng Pháp",
"it": "Italiano - Tiếng Ý",
"ja": "日本語 - Tiếng Nhật",
"vi": "Tiếng Việt - Tiếng Việt"
},
"loading": "Đang tải...",
"next": "Tiếp",
"save": "Lưu",
"seconds": "giây",
"skip": "Bỏ qua",
"submit": "Gửi",
"close": "Đóng"
}
79 changes: 79 additions & 0 deletions packages/web/src/locales/vi/errors.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{
"api": {
"notFound": "Tài nguyên được yêu cầu không tồn tại",
"serverError": "Máy chủ gặp lỗi, vui lòng thử lại"
},
"auth": {
"invalidInviteCode": "Mã tham dự không hợp lệ",
"joinTicketInvalid": "Yêu cầu tham gia đã hết hạn, vui lòng nhập lại mã PIN",
"sessionFailed": "Không thể bắt đầu phiên, vui lòng tải lại trang",
"tokenInvalid": "Mã phiên không hợp lệ",
"tokenMissing": "Thiếu mã phiên",
"unauthorized": "Bạn không có quyền truy cập",
"usernameTooLong": "Tên người dùng không được vượt quá 24 ký tự",
"usernameTooShort": "Tên người dùng không được ngắn hơn 4 ký tự"
},
"game": {
"alreadyStarted": "Trò chơi đã bắt đầu",
"expired": "Trò chơi đã hết hạn",
"invalidAutoAdvanceDelay": "Thời gian chờ phải từ 3 đến 600 giây",
"kickedByManager": "Bạn đã bị quản trị viên mời ra khỏi phòng",
"locked": "Trò chơi đã bị khóa",
"managerAlreadyConnected": "Quản trị viên đã kết nối",
"managerCannotJoin": "Bạn không thể tham gia trò chơi của chính mình",
"managerDisconnected": "Quản trị viên đã ngắt kết nối",
"noPlayersConnected": "Không có người chơi nào kết nối",
"notFound": "Không tìm thấy trò chơi",
"playerAlreadyConnected": "Người chơi đã kết nối"
},
"invalidRequest": "Yêu cầu không hợp lệ",
"manager": {
"failedToReadConfig": "Không đọc được cấu hình trò chơi",
"invalidPassword": "Mật khẩu không hợp lệ",
"passwordNotConfigured": "Mật khẩu quản trị viên chưa được cấu hình"
},
"notFound": {
"back": "Về trang chủ",
"description": "Trang bạn đang tìm không tồn tại.",
"title": "Không tìm thấy trang"
},
"quizz": {
"answerEmpty": "Đáp án không được để trống",
"cooldownTooLong": "Thời gian hiển thị câu hỏi không được vượt quá 15 giây",
"cooldownTooShort": "Thời gian hiển thị câu hỏi phải ít nhất 3 giây",
"failedToDelete": "Xóa trò chơi thất bại",
"failedToSave": "Trò chơi chưa hoàn chỉnh, hãy đảm bảo mọi câu hỏi đều có tiêu đề và ít nhất một đáp án đúng",
"failedToUpdate": "Cập nhật trò chơi thất bại",
"invalidMediaUrl": "URL media phải là một URL hợp lệ",
"maxPointsNegative": "Số điểm không được âm",
"noQuestions": "Trò chơi phải có ít nhất một câu hỏi",
"noSolution": "Chọn ít nhất một đáp án đúng",
"notFound": "Không tìm thấy trò chơi",
"penaltyNegative": "Điểm phạt không được âm",
"questionEmpty": "Câu hỏi không được để trống",
"subjectEmpty": "Chủ đề không được để trống",
"tooFewAnswers": "Một câu hỏi phải có ít nhất 2 câu trả lời",
"tooManyAnswers": "Một câu hỏi không được có quá 4 câu trả lời",
"estimationInvalidRange": "Giá trị tối đa phải lớn hơn giá trị tối thiểu",
"estimationSolutionOutOfRange": "Đáp án đúng phải nằm giữa giá trị tối thiểu và tối đa",
"estimationStepInvalid": "Bước nhảy phải lớn hơn 0",
"estimationMarginNegative": "Biên độ không được âm",
"estimationInvalidOptions": "Cài đặt ước lượng bị thiếu hoặc không hợp lệ"
},
"result": {
"notFound": "Không tìm thấy kết quả"
},
"route": {
"back": "Về trang chủ",
"description": "Đã xảy ra lỗi không mong muốn. Vui lòng thử lại.",
"title": "Đã có lỗi xảy ra"
},
"media": {
"invalidName": "Tên media không hợp lệ",
"invalidType": "Tệp không được hỗ trợ, hãy tải lên hình ảnh, âm thanh hoặc video",
"missingFile": "Chưa có tệp nào được gửi",
"notFound": "Không tìm thấy media",
"tooLarge": "Tệp quá lớn",
"uploadFailed": "Tải tệp lên thất bại"
}
}
63 changes: 63 additions & 0 deletions packages/web/src/locales/vi/game.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"answerNoted": "Cảm ơn, đã ghi nhận",
"confirm": "Xác nhận",
"correct": "Chính xác!",
"gamePinLabel": "Mã PIN trò chơi:",
"generatedUsernameNotice": "Bạn sẽ được đặt một biệt danh ngẫu nhiên khi tham gia.",
"hud": {
"answers": "Câu trả lời",
"time": "Thời gian"
},
"media": {
"showImage": "Hiện hình ảnh",
"showVideo": "Hiện video"
},
"question": {
"show": "Hiện câu hỏi"
},
"joinInstruction": "Tham gia trò chơi tại",
"leaderboard": "Bảng xếp hạng",
"lock": {
"lock": "Khóa phòng",
"unlock": "Mở khóa phòng"
},
"pinLabel": "Mã PIN",
"playersJoined": "Người chơi đã tham gia",
"questionPrefix": "Câu hỏi #",
"rank_ordinal_other": "hạng {{count}}",
"reconnect": "Kết nối lại",
"reconnectTitle": "Bạn đang ở trong một trò chơi",
"resultBehind": ", sau ",
"resultTop": "Bạn xếp ",
"settings": {
"autoAdvance": {
"hint": "Tự động chuyển tiếp sau khi công bố đáp án và bảng xếp hạng.",
"label": "Tự động chuyển tiếp",
"leaderboardDelay": "Bảng xếp hạng",
"responsesDelay": "Kết quả"
},
"generatedUsernames": {
"label": "Tạo biệt danh",
"hint": "Người chơi chọn từ các tên được tạo sẵn thay vì tự nhập."
},
"answersOnly": {
"label": "Chỉ hiện đáp án",
"hint": "Người chơi chỉ thấy các nút đáp án, kèm một nút để đọc lại câu hỏi."
},
"title": "Cài đặt trò chơi"
},
"startGame": "Bắt đầu trò chơi",
"summary": {
"title": "Khảo sát đã kết thúc",
"participants": "Người tham gia",
"questions": "Câu hỏi"
},
"usernamePlaceholder": "Nhập tên người dùng",
"waitingForAnswers": "Đang chờ người chơi trả lời",
"waitingForPlayers": "Đang chờ người chơi",
"wrong": "Sai rồi",
"estimation": {
"yourAnswer": "Câu trả lời của bạn",
"rangeHint": "Từ {{min}} đến {{max}}"
}
}
51 changes: 51 additions & 0 deletions packages/web/src/locales/vi/manager.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"configurationsTitle": "Cấu hình",
"logout": "Đăng xuất",
"passwordPlaceholder": "Mật khẩu",
"quizz": {
"create": "Tạo trò chơi",
"delete": "Xóa trò chơi",
"deleteConfirm": "Bạn có chắc muốn xóa \"{{name}}\"? Trò chơi này sẽ bị xóa vĩnh viễn.",
"deleted": "Đã xóa trò chơi",
"export": "Xuất trò chơi dạng JSON",
"import": "Nhập trò chơi từ JSON",
"none": "Chưa có trò chơi nào",
"notFound": "Không tìm thấy trò chơi",
"pleaseCreate": "Vui lòng tạo trò chơi trước",
"pleaseSelect": "Vui lòng chọn một trò chơi",
"startGame": "Bắt đầu trò chơi"
},
"result": {
"delete": "Xóa kết quả",
"deleteConfirm": "Xóa kết quả của \"{{name}}\"? Kết quả này sẽ bị xóa vĩnh viễn.",
"deleted": "Đã xóa kết quả",
"noAnswer": "Không có câu trả lời",
"none": "Chưa có kết quả, hoàn thành một trò chơi để xem báo cáo tại đây",
"paginationOf": " / ",
"stats": {
"correctAnswers": "Câu trả lời đúng",
"playersAnswered": "Người chơi đã trả lời"
},
"table": {
"answered": "Đã trả lời",
"correct": " Đúng",
"correctIncorrect": "Đúng / Sai",
"incorrect": " Sai",
"player": "Người chơi",
"points": "Điểm"
},
"playerCount": "{{count}} người chơi",
"timeLimitSuffix": "s giới hạn thời gian",
"estimation": {
"answered": "Đã trả lời",
"withinMargin": "{{value}} ± {{margin}}",
"outsideMargin": "Ngoài biên độ",
"average": "Câu trả lời trung bình: {{value}}"
}
},
"tabs": {
"play": "Trò chơi",
"quizz": "Cấu hình",
"results": "Kết quả"
}
}
99 changes: 99 additions & 0 deletions packages/web/src/locales/vi/quizz.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
{
"addAnswerPlaceholder": "Thêm câu trả lời...",
"addQuestion": "Thêm câu hỏi",
"answersCountSuffix": " câu trả lời",
"deleteQuestion": "Xóa câu hỏi",
"gameMode": {
"quiz": "Đố vui",
"survey": "Khảo sát"
},
"noQuestionYet": "Chưa có câu hỏi",
"question": {
"addMediaHint": "Thêm ảnh, video hoặc âm thanh vào câu hỏi",
"config": {
"answerTime": "Thời gian trả lời",
"answerTimeHint": "Thời gian người chơi có để trả lời",
"noTimeLimit": "Không giới hạn thời gian",
"noTimeLimitHint": "Điểm được tính theo thứ tự trả lời. Không có giới hạn thời gian để trả lời.",
"questionDisplay": "Hiển thị câu hỏi",
"questionDisplayHint": "Thời gian trước khi hiện câu trả lời",
"timings": "Thời gian",
"answerMode": "Chế độ trả lời",
"category": "Chủ đề",
"categoryPlaceholder": "VD: Địa lý",
"categoryHint": "Các câu hỏi liên tiếp cùng chủ đề tạo thành một vòng. Bảng xếp hạng chỉ hiện khi chuyển sang chủ đề khác.",
"scoring": "Tính điểm",
"maxPoints": "Điểm tối đa",
"maxPointsHint": "Điểm tối đa khi trả lời đúng",
"penalty": "Phạt",
"penaltyHint": "Điểm bị trừ khi chọn đáp án sai (tổng điểm không dưới 0)",
"scoringMode": "Chế độ tính điểm",
"scoringMode.strict": "Nghiêm ngặt",
"scoringMode.balanced": "Cân bằng",
"scoringMode.lenient": "Dễ dàng",
"scoringModeHint.strict": "Điểm đầy đủ chỉ khi chọn đủ đáp án đúng và không chọn đáp án sai",
"scoringModeHint.balanced": "Điểm một phần: đáp án đúng, bị phạt đáp án sai",
"scoringModeHint.lenient": "Điểm theo từng đáp án đúng, không phạt đáp án sai",
"estimation": {
"title": "Ước lượng",
"inputMode": "Kiểu nhập",
"inputModes": {
"slider": "Thanh trượt",
"input": "Nhập tự do"
},
"inputModeHint": {
"slider": "Người chơi chọn giá trị bằng thanh trượt trong khoảng giới hạn",
"input": "Người chơi nhập một số trong khoảng giới hạn"
},
"min": "Tối thiểu",
"max": "Tối đa",
"step": "Bước nhảy",
"stepHint": "Độ chính xác của thanh trượt và đáp án mong đợi",
"margin": "Biên độ",
"marginHint": "Câu trả lời nằm trong khoảng này so với đáp án đúng được từ 100% (chính xác) đến 50% số điểm. Câu trả lời ngoài khoảng này không được điểm."
}
},
"deleteQuestion": "Xóa câu hỏi",
"deleteQuestionConfirm": "Bạn có chắc muốn xóa câu hỏi này?",
"media": {
"audio": "Âm thanh",
"image": "Hình ảnh",
"video": "Video"
},
"mediaUrlPlaceholder": "Nhập URL...",
"placeholder": "Nhập câu hỏi của bạn...",
"estimation": {
"correctAnswer": "Đáp án đúng"
}
},
"questionHasErrors": "Câu hỏi này có lỗi",
"questionType": {
"single": "Chọn một đáp án",
"multi": "Chọn nhiều đáp án",
"estimation": "Ước lượng"
},
"quizzSaved": "Đã lưu trò chơi thành công",
"quizzUpdated": "Đã cập nhật trò chơi thành công",
"titleQuizzPlaceholder": "Tiêu đề trò chơi...",
"media": {
"delete": "Xóa media",
"deleteConfirm": "Xóa \"{{name}}\"? Các câu hỏi đang dùng media này trong mọi trò chơi sẽ mất media.",
"library": "Thư viện media",
"libraryEmpty": "Thư viện của bạn đang trống",
"upload": "Tải lên",
"uploadHint": "Hình ảnh, âm thanh hoặc video, tối đa {{size}} MB",
"search": "Tìm media...",
"filter": {
"all": "Tất cả"
},
"use": "Dùng",
"dropHint": "Thả hình ảnh, âm thanh và video vào đây, hoặc dùng nút Tải lên",
"dropHere": "Thả để tải lên",
"noResults": "Không có media nào khớp với tìm kiếm",
"fromUrl": "Thêm từ URL",
"view": {
"grid": "Dạng lưới",
"list": "Dạng danh sách"
}
}
}
Loading