Skip to content

Commit 90bc732

Browse files
ANIBIT14wobsoriano
andauthored
feat(localizations): add missing vi-VN (Vietnamese) translations (#8663)
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>
1 parent e7cb503 commit 90bc732

2 files changed

Lines changed: 114 additions & 95 deletions

File tree

.changeset/vi-vn-translations.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/localizations': patch
3+
---
4+
5+
Add missing Vietnamese (Vietnam) (`vi-VN`) translations. Fills in previously untranslated keys across billing, checkout, subscription details, organization switcher, enterprise connections, password reset and two-step verification (MFA) setup tasks, frontend API errors, and the user button menu.

packages/localizations/src/vi-VN.ts

Lines changed: 109 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,16 @@ export const viVN: LocalizationResource = {
6060
badge__default: 'Mặc định',
6161
badge__endsAt: "Kết thúc {{ date | shortDate('vi-VN') }}",
6262
badge__expired: 'Đã hết hạn',
63-
badge__freeTrial: undefined,
63+
badge__freeTrial: 'Dùng thử miễn phí',
6464
badge__otherImpersonatorDevice: 'Thiết bị giả mạo khác',
65-
badge__pastDueAt: undefined,
66-
badge__pastDuePlan: undefined,
65+
badge__pastDueAt: "Quá hạn {{ date | shortDate('vi-VN') }}",
66+
badge__pastDuePlan: 'Quá hạn',
6767
badge__primary: 'Chính',
6868
badge__renewsAt: "Gia hạn {{ date | shortDate('vi-VN') }}",
6969
badge__requiresAction: 'Yêu cầu hành động',
7070
badge__startsAt: "Bắt đầu {{ date | shortDate('vi-VN') }}",
7171
badge__thisDevice: 'Thiết bị này',
72-
badge__trialEndsAt: undefined,
72+
badge__trialEndsAt: "Kết thúc dùng thử {{ date | shortDate('vi-VN') }}",
7373
badge__unverified: 'Chưa xác minh',
7474
badge__upcomingPlan: 'Sắp tới',
7575
badge__userDevice: 'Thiết bị người dùng',
@@ -81,18 +81,20 @@ export const viVN: LocalizationResource = {
8181
availableFeatures: 'Tính năng có sẵn',
8282
billedAnnually: 'Tính phí hàng năm',
8383
billedMonthlyOnly: 'Chỉ tính phí hàng tháng',
84-
cancelFreeTrial: undefined,
85-
cancelFreeTrialAccessUntil: undefined,
86-
cancelFreeTrialTitle: undefined,
84+
cancelFreeTrial: 'Hủy dùng thử miễn phí',
85+
cancelFreeTrialAccessUntil:
86+
"Bản dùng thử của bạn sẽ vẫn hoạt động cho đến {{ date | longDate('vi-VN') }}. Sau đó, bạn sẽ mất quyền truy cập vào các tính năng dùng thử. Bạn sẽ không bị tính phí.",
87+
cancelFreeTrialTitle: 'Hủy dùng thử miễn phí cho gói {{plan}}?',
8788
cancelSubscription: 'Hủy đăng ký',
8889
cancelSubscriptionAccessUntil:
8990
"Bạn có thể tiếp tục sử dụng tính năng '{{plan}}' cho đến {{ date | longDate('vi-VN') }}, sau đó bạn sẽ không còn quyền truy cập.",
9091
cancelSubscriptionNoCharge: 'Bạn sẽ không bị tính phí cho đăng ký này.',
91-
cancelSubscriptionPastDue: undefined,
92+
cancelSubscriptionPastDue:
93+
'Gói đăng ký của bạn sẽ kết thúc ngay lập tức và bạn sẽ mất quyền truy cập vào tất cả các tính năng của gói. Bạn sẽ được yêu cầu thanh toán số tiền quá hạn trong lần đăng ký tiếp theo.',
9294
cancelSubscriptionTitle: 'Hủy đăng ký {{plan}}?',
9395
cannotSubscribeMonthly:
9496
'Bạn không thể đăng ký gói này bằng cách thanh toán hàng tháng. Để đăng ký gói này, bạn cần chọn thanh toán hàng năm.',
95-
cannotSubscribeUnrecoverable: undefined,
97+
cannotSubscribeUnrecoverable: 'Bạn không thể đăng ký gói này. Gói đăng ký hiện tại của bạn đắt hơn gói này.',
9698
checkout: {
9799
description__paymentSuccessful: 'Thanh toán của bạn đã thành công.',
98100
description__subscriptionSuccessful: 'Đăng ký mới của bạn đã được thiết lập.',
@@ -103,7 +105,7 @@ export const viVN: LocalizationResource = {
103105
title: 'Thêm địa chỉ email',
104106
},
105107
lineItems: {
106-
title__freeTrialEndsAt: undefined,
108+
title__freeTrialEndsAt: 'Dùng thử kết thúc vào',
107109
title__paymentMethod: 'Phương thức thanh toán',
108110
title__statementId: 'ID hóa đơn',
109111
title__subscriptionBegins: 'Đăng ký bắt đầu',
@@ -114,15 +116,15 @@ export const viVN: LocalizationResource = {
114116
title: 'Thanh toán',
115117
title__paymentSuccessful: 'Thanh toán thành công!',
116118
title__subscriptionSuccessful: 'Thành công!',
117-
title__trialSuccess: undefined,
118-
totalDueAfterTrial: undefined,
119+
title__trialSuccess: 'Đã bắt đầu dùng thử thành công!',
120+
totalDueAfterTrial: 'Tổng số tiền phải trả sau khi dùng thử kết thúc trong {{days}} ngày',
119121
},
120122
credit: 'Tín dụng',
121123
creditRemainder: 'Tín dụng cho phần còn lại của đăng ký hiện tại.',
122124
defaultFreePlanActive: 'Bạn hiện đang trên gói Miễn phí',
123125
free: 'Miễn phí',
124126
getStarted: 'Bắt đầu',
125-
keepFreeTrial: undefined,
127+
keepFreeTrial: 'Giữ bản dùng thử miễn phí',
126128
keepSubscription: 'Giữ đăng ký',
127129
manage: 'Quản lý',
128130
manageSubscription: 'Quản lý đăng ký',
@@ -152,34 +154,34 @@ export const viVN: LocalizationResource = {
152154
},
153155
reSubscribe: 'Đăng ký lại',
154156
seeAllFeatures: 'Xem tất cả tính năng',
155-
startFreeTrial: undefined,
156-
startFreeTrial__days: undefined,
157+
startFreeTrial: 'Bắt đầu dùng thử miễn phí',
158+
startFreeTrial__days: 'Bắt đầu dùng thử miễn phí {{days}} ngày',
157159
subscribe: 'Đăng ký',
158160
subscriptionDetails: {
159-
beginsOn: undefined,
160-
currentBillingCycle: undefined,
161-
endsOn: undefined,
162-
firstPaymentAmount: undefined,
163-
firstPaymentOn: undefined,
164-
nextPaymentAmount: undefined,
165-
nextPaymentOn: undefined,
166-
pastDueAt: undefined,
167-
renewsAt: undefined,
168-
subscribedOn: undefined,
169-
title: undefined,
170-
trialEndsOn: undefined,
171-
trialStartedOn: undefined,
161+
beginsOn: 'Bắt đầu vào',
162+
currentBillingCycle: 'Chu kỳ thanh toán hiện tại',
163+
endsOn: 'Kết thúc vào',
164+
firstPaymentAmount: 'Số tiền thanh toán đầu tiên',
165+
firstPaymentOn: 'Thanh toán đầu tiên vào',
166+
nextPaymentAmount: 'Số tiền thanh toán tiếp theo',
167+
nextPaymentOn: 'Thanh toán tiếp theo vào',
168+
pastDueAt: 'Quá hạn vào',
169+
renewsAt: 'Gia hạn vào',
170+
subscribedOn: 'Đăng ký vào',
171+
title: 'Gói đăng ký',
172+
trialEndsOn: 'Dùng thử kết thúc vào',
173+
trialStartedOn: 'Dùng thử bắt đầu vào',
172174
},
173175
subtotal: 'Tổng cộng',
174176
switchPlan: 'Chuyển sang gói này',
175177
switchToAnnual: 'Chuyển sang hàng năm',
176-
switchToAnnualWithAnnualPrice: undefined,
178+
switchToAnnualWithAnnualPrice: 'Chuyển sang gói năm {{currency}}{{price}} / năm',
177179
switchToMonthly: 'Chuyển sang hàng tháng',
178-
switchToMonthlyWithPrice: undefined,
180+
switchToMonthlyWithPrice: 'Chuyển sang gói tháng {{currency}}{{price}} / tháng',
179181
totalDue: 'Tổng cần thanh toán',
180182
totalDueToday: 'Tổng cần thanh toán hôm nay',
181183
viewFeatures: 'Xem tính năng',
182-
viewPayment: undefined,
184+
viewPayment: 'Xem thanh toán',
183185
year: 'Năm',
184186
},
185187
configureSSO: {
@@ -271,8 +273,8 @@ export const viVN: LocalizationResource = {
271273
formFieldInputPlaceholder__organizationSlug: 'my-org',
272274
formFieldInputPlaceholder__password: 'Nhập mật khẩu của bạn',
273275
formFieldInputPlaceholder__phoneNumber: 'Nhập số điện thoại của bạn',
274-
formFieldInputPlaceholder__username: undefined,
275-
formFieldInput__emailAddress_format: undefined,
276+
formFieldInputPlaceholder__username: 'Nhập tên người dùng của bạn',
277+
formFieldInput__emailAddress_format: 'Định dạng ví dụ: name@example.com',
276278
formFieldLabel__apiKey: 'Khóa API',
277279
formFieldLabel__apiKeyDescription: 'Mô tả',
278280
formFieldLabel__apiKeyExpiration: 'Hết hạn',
@@ -373,7 +375,7 @@ export const viVN: LocalizationResource = {
373375
totalPaid: 'Tổng thanh toán',
374376
},
375377
subscriptionsListSection: {
376-
actionLabel__manageSubscription: undefined,
378+
actionLabel__manageSubscription: 'Quản lý',
377379
actionLabel__newSubscription: 'Đăng ký gói',
378380
actionLabel__switchPlan: 'Chuyển gói',
379381
tableHeader__edit: 'Sửa',
@@ -549,11 +551,11 @@ export const viVN: LocalizationResource = {
549551
},
550552
},
551553
organizationSwitcher: {
552-
action__closeOrganizationSwitcher: undefined,
554+
action__closeOrganizationSwitcher: 'Đóng menu chuyển đổi tổ chức',
553555
action__createOrganization: 'Tạo tổ chức',
554556
action__invitationAccept: 'Tham gia',
555557
action__manageOrganization: 'Quản lý',
556-
action__openOrganizationSwitcher: undefined,
558+
action__openOrganizationSwitcher: 'Mở menu chuyển đổi tổ chức',
557559
action__suggestionsAccept: 'Yêu cầu tham gia',
558560
notSelected: 'Không có tổ chức được chọn',
559561
personalWorkspace: 'Tài khoản cá nhân',
@@ -716,8 +718,8 @@ export const viVN: LocalizationResource = {
716718
title: 'Kiểm tra email của bạn',
717719
},
718720
enterpriseConnections: {
719-
subtitle: undefined,
720-
title: undefined,
721+
subtitle: 'Chọn tài khoản doanh nghiệp bạn muốn dùng để tiếp tục.',
722+
title: 'Chọn tài khoản doanh nghiệp của bạn',
721723
},
722724
forgotPassword: {
723725
formTitle: 'Mã xác minh mật khẩu',
@@ -750,13 +752,13 @@ export const viVN: LocalizationResource = {
750752
title: 'Nhập mật khẩu',
751753
},
752754
passwordCompromised: {
753-
title: undefined,
755+
title: 'Mật khẩu đã bị xâm phạm',
754756
},
755757
passwordPwned: {
756758
title: 'Mật khẩu bị rò rỉ',
757759
},
758760
passwordUntrusted: {
759-
title: undefined,
761+
title: 'Mật khẩu không đáng tin cậy',
760762
},
761763
phoneCode: {
762764
formTitle: 'Mã xác minh',
@@ -853,8 +855,8 @@ export const viVN: LocalizationResource = {
853855
},
854856
},
855857
enterpriseConnections: {
856-
subtitle: undefined,
857-
title: undefined,
858+
subtitle: 'Chọn tài khoản doanh nghiệp bạn muốn dùng để tiếp tục.',
859+
title: 'Chọn tài khoản doanh nghiệp của bạn',
858860
},
859861
legalConsent: {
860862
checkbox: {
@@ -942,74 +944,82 @@ export const viVN: LocalizationResource = {
942944
},
943945
},
944946
taskResetPassword: {
945-
formButtonPrimary: undefined,
947+
formButtonPrimary: 'Đặt lại mật khẩu',
946948
signOut: {
947-
actionLink: undefined,
948-
actionText: undefined,
949+
actionLink: 'Đăng xuất',
950+
actionText: 'Đã đăng nhập với tư cách {{identifier}}',
949951
},
950-
subtitle: undefined,
951-
title: undefined,
952+
subtitle: 'Tài khoản của bạn yêu cầu mật khẩu mới trước khi bạn có thể tiếp tục',
953+
title: 'Đặt lại mật khẩu của bạn',
952954
},
953955
taskSetupMfa: {
954-
badge: undefined,
956+
badge: 'Thiết lập xác minh hai bước',
955957
signOut: {
956-
actionLink: undefined,
957-
actionText: undefined,
958+
actionLink: 'Đăng xuất',
959+
actionText: 'Đã đăng nhập với tư cách {{identifier}}',
958960
},
959961
smsCode: {
960962
addPhone: {
961-
formButtonPrimary: undefined,
962-
infoText: undefined,
963+
formButtonPrimary: 'Tiếp tục',
964+
infoText:
965+
'Một tin nhắn văn bản chứa mã xác minh sẽ được gửi đến số điện thoại này. Có thể áp dụng cước phí tin nhắn và dữ liệu.',
963966
},
964-
addPhoneNumber: undefined,
965-
cancel: undefined,
966-
subtitle: undefined,
967+
addPhoneNumber: 'Thêm số điện thoại',
968+
cancel: 'Hủy',
969+
subtitle: 'Chọn số điện thoại bạn muốn sử dụng để xác minh hai bước bằng mã SMS',
967970
success: {
968-
finishButton: undefined,
969-
message1: undefined,
970-
message2: undefined,
971-
title: undefined,
972-
},
973-
title: undefined,
971+
finishButton: 'Tiếp tục',
972+
message1:
973+
'Xác minh hai bước hiện đã được bật. Khi đăng nhập, bạn sẽ cần nhập mã xác minh được gửi đến số điện thoại này như một bước bổ sung.',
974+
message2:
975+
'Lưu các mã dự phòng này và cất giữ ở nơi an toàn. Nếu bạn mất quyền truy cập vào thiết bị xác thực, bạn có thể sử dụng mã dự phòng để đăng nhập.',
976+
title: 'Đã bật xác minh bằng mã SMS',
977+
},
978+
title: 'Thêm xác minh bằng mã SMS',
974979
verifyPhone: {
975-
formButtonPrimary: undefined,
976-
formTitle: undefined,
977-
resendButton: undefined,
978-
subtitle: undefined,
979-
title: undefined,
980+
formButtonPrimary: 'Tiếp tục',
981+
formTitle: 'Mã xác minh',
982+
resendButton: 'Không nhận được mã? Gửi lại',
983+
subtitle: 'Nhập mã xác minh được gửi đến',
984+
title: 'Xác minh số điện thoại của bạn',
980985
},
981986
},
982987
start: {
983988
methodSelection: {
984-
phoneCode: undefined,
985-
totp: undefined,
989+
phoneCode: 'Mã SMS',
990+
totp: 'Ứng dụng xác thực',
986991
},
987-
subtitle: undefined,
988-
title: undefined,
992+
subtitle: 'Chọn phương thức bạn muốn sử dụng để bảo vệ tài khoản của mình bằng một lớp bảo mật bổ sung',
993+
title: 'Thiết lập xác minh hai bước',
989994
},
990995
totpCode: {
991996
addAuthenticatorApp: {
992-
buttonAbleToScan__nonPrimary: undefined,
993-
buttonUnableToScan__nonPrimary: undefined,
994-
formButtonPrimary: undefined,
995-
formButtonReset: undefined,
996-
infoText__ableToScan: undefined,
997-
infoText__unableToScan: undefined,
998-
inputLabel__unableToScan1: undefined,
997+
buttonAbleToScan__nonPrimary: 'Thay vào đó, quét mã QR',
998+
buttonUnableToScan__nonPrimary: 'Không thể quét mã QR?',
999+
formButtonPrimary: 'Tiếp tục',
1000+
formButtonReset: 'Hủy',
1001+
infoText__ableToScan:
1002+
'Thiết lập một phương thức đăng nhập mới trong ứng dụng xác thực của bạn và quét mã QR sau đây để liên kết nó với tài khoản của bạn.',
1003+
infoText__unableToScan:
1004+
'Thiết lập một phương thức đăng nhập mới trong ứng dụng xác thực của bạn và nhập Khóa được cung cấp bên dưới.',
1005+
inputLabel__unableToScan1:
1006+
'Đảm bảo rằng Mã dựa trên thời gian hoặc Mã một lần đã được bật, sau đó hoàn tất việc liên kết tài khoản của bạn.',
9991007
},
10001008
success: {
1001-
finishButton: undefined,
1002-
message1: undefined,
1003-
message2: undefined,
1004-
title: undefined,
1009+
finishButton: 'Tiếp tục',
1010+
message1:
1011+
'Xác minh hai bước hiện đã được bật. Khi đăng nhập, bạn sẽ cần nhập mã xác minh từ ứng dụng xác thực này như một bước bổ sung.',
1012+
message2:
1013+
'Lưu các mã dự phòng này và cất giữ ở nơi an toàn. Nếu bạn mất quyền truy cập vào thiết bị xác thực, bạn có thể sử dụng mã dự phòng để đăng nhập.',
1014+
title: 'Đã bật xác minh bằng ứng dụng xác thực',
10051015
},
1006-
title: undefined,
1016+
title: 'Thêm ứng dụng xác thực',
10071017
verifyTotp: {
1008-
formButtonPrimary: undefined,
1009-
formButtonReset: undefined,
1010-
formTitle: undefined,
1011-
subtitle: undefined,
1012-
title: undefined,
1018+
formButtonPrimary: 'Tiếp tục',
1019+
formButtonReset: 'Hủy',
1020+
formTitle: 'Mã xác minh',
1021+
subtitle: 'Nhập mã xác minh được tạo bởi ứng dụng xác thực của bạn',
1022+
title: 'Thêm ứng dụng xác thực',
10131023
},
10141024
},
10151025
},
@@ -1027,7 +1037,7 @@ export const viVN: LocalizationResource = {
10271037
form_identifier_exists__phone_number: undefined,
10281038
form_identifier_exists__username: undefined,
10291039
form_identifier_not_found: undefined,
1030-
form_new_password_matches_current: undefined,
1040+
form_new_password_matches_current: 'Mật khẩu mới không được trùng với mật khẩu hiện tại.',
10311041
form_param_format_invalid: undefined,
10321042
form_param_format_invalid__email_address: undefined,
10331043
form_param_format_invalid__phone_number: undefined,
@@ -1050,7 +1060,8 @@ export const viVN: LocalizationResource = {
10501060
form_password_pwned__sign_in:
10511061
'Mật khẩu này đã được tìm thấy trong một rò rỉ và không thể được sử dụng, vui lòng đặt lại mật khẩu của bạn.',
10521062
form_password_size_in_bytes_exceeded: undefined,
1053-
form_password_untrusted__sign_in: undefined,
1063+
form_password_untrusted__sign_in:
1064+
'Mật khẩu của bạn có thể đã bị xâm phạm. Để bảo vệ tài khoản, vui lòng tiếp tục bằng một phương thức đăng nhập khác. Bạn sẽ được yêu cầu đặt lại mật khẩu sau khi đăng nhập.',
10541065
form_password_validation_failed: undefined,
10551066
form_username_invalid_character: undefined,
10561067
form_username_invalid_length: 'Tên người dùng của bạn phải có giữa {{min_length}} và {{max_length}} ký tự.',
@@ -1060,10 +1071,13 @@ export const viVN: LocalizationResource = {
10601071
organization_domain_blocked: undefined,
10611072
organization_domain_common: undefined,
10621073
organization_domain_exists_for_enterprise_connection: undefined,
1063-
organization_membership_quota_exceeded: undefined,
1074+
organization_membership_quota_exceeded:
1075+
'Bạn đã đạt đến giới hạn {{maxAllowed}} thành viên tổ chức, bao gồm cả các lời mời đang chờ xử lý.',
10641076
organization_minimum_permissions_needed: undefined,
1065-
organization_not_found_or_unauthorized: undefined,
1066-
organization_not_found_or_unauthorized_with_create_organization_disabled: undefined,
1077+
organization_not_found_or_unauthorized:
1078+
'Bạn không còn là thành viên của tổ chức này. Vui lòng chọn hoặc tạo một tổ chức khác.',
1079+
organization_not_found_or_unauthorized_with_create_organization_disabled:
1080+
'Bạn không còn là thành viên của tổ chức này. Vui lòng chọn một tổ chức khác.',
10671081
passkey_already_exists: 'Mã passkey đã được đăng ký với thiết bị này.',
10681082
passkey_not_supported: 'Mã passkey không được hỗ trợ trên thiết bị này.',
10691083
passkey_pa_not_supported: 'Đăng ký yêu cầu một bộ xác thực nền tảng nhưng thiết bị không hỗ trợ nó.',
@@ -1125,9 +1139,9 @@ export const viVN: LocalizationResource = {
11251139
},
11261140
userButton: {
11271141
action__addAccount: 'Thêm tài khoản',
1128-
action__closeUserMenu: undefined,
1142+
action__closeUserMenu: 'Đóng menu người dùng',
11291143
action__manageAccount: 'Quản lý tài khoản',
1130-
action__openUserMenu: undefined,
1144+
action__openUserMenu: 'Mở menu người dùng',
11311145
action__signOut: 'Đăng xuất',
11321146
action__signOutAll: 'Đăng xuất tất cả tài khoản',
11331147
},
@@ -1195,7 +1209,7 @@ export const viVN: LocalizationResource = {
11951209
totalPaid: 'Tổng thanh toán',
11961210
},
11971211
subscriptionsListSection: {
1198-
actionLabel__manageSubscription: undefined,
1212+
actionLabel__manageSubscription: 'Quản lý',
11991213
actionLabel__newSubscription: 'Đăng ký gói',
12001214
actionLabel__switchPlan: 'Chuyển gói',
12011215
tableHeader__edit: 'Sửa',

0 commit comments

Comments
 (0)