diff --git a/.changeset/complete-vi-vn-translations.md b/.changeset/complete-vi-vn-translations.md new file mode 100644 index 00000000000..58725e51ebf --- /dev/null +++ b/.changeset/complete-vi-vn-translations.md @@ -0,0 +1,5 @@ +--- +'@clerk/localizations': patch +--- + +Complete Vietnamese (vi-VN) translations for billing, SSO configuration, directory sync, organization profile, OAuth flows and auth error messages. diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 35e6662dc65..6dba4ac82dd 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -15,9 +15,9 @@ import type { LocalizationResource } from '@clerk/shared/types'; export const viVN: LocalizationResource = { locale: 'vi-VN', actionBlocked: { - subtitle: undefined, - title: undefined, - traceIdLabel: undefined, + subtitle: 'Vì lý do bảo mật, yêu cầu này không thể hoàn thành.', + title: 'Không thể hoàn thành yêu cầu này', + traceIdLabel: 'Mã tham chiếu', }, apiKeys: { action__add: 'Thêm khoá mới', @@ -56,19 +56,19 @@ export const viVN: LocalizationResource = { formButtonPrimary__revoke: 'Hủy khoá', formHint: 'Bạn có chắc chắn muốn xóa khoá này không?', formTitle: 'Hủy khoá "{{apiKeyName}}" không?', - inputLabel: undefined, + inputLabel: 'Nhập "Hủy" để xác nhận', }, - tableHeader__actions: undefined, - tableHeader__lastUsed: undefined, - tableHeader__name: undefined, + tableHeader__actions: 'Hành động', + tableHeader__lastUsed: 'Sử dụng lần cuối', + tableHeader__name: 'Tên', }, backButton: 'Quay lại', badge__activePlan: 'Đang hoạt động', - badge__banned: undefined, + badge__banned: 'Bị cấm', badge__canceledEndsAt: "Đã hủy • Kết thúc {{ date | shortDate('vi-VN') }}", badge__currentPlan: 'Gói hiện tại', badge__default: 'Mặc định', - badge__deprovisioned: undefined, + badge__deprovisioned: 'Đã hủy cấp phép', badge__endsAt: "Kết thúc {{ date | shortDate('vi-VN') }}", badge__expired: 'Đã hết hạn', badge__freeTrial: 'Dùng thử miễn phí', @@ -86,14 +86,14 @@ export const viVN: LocalizationResource = { badge__userDevice: 'Thiết bị người dùng', badge__you: 'Bạn', billing: { - accountCredit: undefined, + accountCredit: 'Tín dụng tài khoản', addPaymentMethod__label: 'Thêm phương thức thanh toán', alwaysFree: 'Miễn phí mãi mãi', annually: 'Hàng năm', availableFeatures: 'Tính năng có sẵn', billedAnnually: 'Tính phí hàng năm', - billedAnnuallyOnly: undefined, - billedMonthly: undefined, + billedAnnuallyOnly: 'Chỉ tính phí hàng năm', + billedMonthly: 'Tính phí hàng tháng', billedMonthlyOnly: 'Chỉ tính phí hàng tháng', cancelFreeTrial: 'Hủy dùng thử miễn phí', cancelFreeTrialAccessUntil: @@ -110,11 +110,11 @@ export const viVN: LocalizationResource = { '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.', 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.', checkout: { - addPromoCode: undefined, - applyPromoCode: undefined, + addPromoCode: 'Thêm mã khuyến mãi', + applyPromoCode: 'Áp dụng', description__paymentSuccessful: 'Thanh toán của bạn đã thành công.', description__subscriptionSuccessful: 'Đăng ký mới của bạn đã được thiết lập.', - discount: undefined, + discount: 'Giảm giá', downgradeNotice: 'Bạn sẽ giữ đăng ký hiện tại và các tính năng của nó cho đến cuối chu kỳ thanh toán, sau đó bạn sẽ được chuyển sang đăng ký này.', emailForm: { @@ -130,21 +130,21 @@ export const viVN: LocalizationResource = { }, pastDueNotice: 'Đăng ký trước của bạn đã quá hạn và chưa thanh toán.', perMonth: 'hàng tháng', - promoCodePlaceholder: undefined, - removePromoCode: undefined, + promoCodePlaceholder: 'Nhập mã khuyến mãi', + removePromoCode: 'Xóa mã khuyến mãi', title: 'Thanh toán', title__paymentSuccessful: 'Thanh toán thành công!', title__subscriptionSuccessful: 'Thành công!', title__trialSuccess: 'Đã bắt đầu dùng thử thành công!', totalDueAfterTrial: 'Tổng số tiền phải trả sau khi dùng thử kết thúc trong {{days}} ngày', - totalDuePerPeriod: undefined, + totalDuePerPeriod: 'Tổng phải trả mỗi kỳ', }, credit: 'Tín dụng', creditRemainder: 'Tín dụng cho phần còn lại của đăng ký hiện tại.', defaultFreePlanActive: 'Bạn hiện đang trên gói Miễn phí', - discountAmount: undefined, - discountCyclesRemaining: undefined, - discountDuration: undefined, + discountAmount: 'Giảm {{amount}}', + discountCyclesRemaining: 'Còn {{cycles}} {{period}}', + discountDuration: 'Giảm {{amount}} cho {{cycles}} {{period}} đầu tiên', free: 'Miễn phí', getStarted: 'Bắt đầu', highlightedPlanBadge: 'Phổ biến', @@ -153,13 +153,13 @@ export const viVN: LocalizationResource = { manage: 'Quản lý', manageSubscription: 'Quản lý đăng ký', month: 'Tháng', - monthAbbreviation: undefined, - monthPerUnit: undefined, + monthAbbreviation: 'th', + monthPerUnit: 'Tháng trên {{unitName}}', monthly: 'Hàng tháng', - months: undefined, + months: 'Tháng', pastDue: 'Quá hạn', pay: 'Thanh toán {{amount}}', - payerCreditRemainder: undefined, + payerCreditRemainder: 'Tín dụng từ số dư tài khoản.', paymentMethod: { applePayDescription: { annual: 'Thanh toán hàng năm', @@ -179,28 +179,29 @@ export const viVN: LocalizationResource = { billingCycle: 'Chu kỳ thanh toán', included: 'Bao gồm', seatCost: { - additionalSeats: undefined, - freeUpToSeats: undefined, - includedSeats: undefined, - perSeat: undefined, + additionalSeats: '({{additionalTierFeePerBlockAmount}}/{{periodAbbreviation}} cho người dùng bổ sung)', + freeUpToSeats: 'Miễn phí tối đa {{endsAfterBlock}} người dùng', + includedSeats: '{{includedSeats}} người dùng bao gồm', + perSeat: '{{feePerBlockAmount}}/{{periodAbbreviation}} mỗi người dùng', tooltip: { - additionalSeatsEach: undefined, - firstSeatsIncludedInPlan: undefined, - freeForUpToSeats: undefined, + additionalSeatsEach: 'Người dùng bổ sung có giá {{feePerBlockAmount}}/{{period}} mỗi người dùng.', + firstSeatsIncludedInPlan: '{{endsAfterBlock}} người dùng đầu tiên đã bao gồm trong gói.', + freeForUpToSeats: 'Miễn phí tối đa {{endsAfterBlock}} người dùng.', }, - unlimitedSeats: undefined, - upToSeats: undefined, + unlimitedSeats: 'Không giới hạn người dùng', + upToSeats: 'Tối đa {{endsAfterBlock}} người dùng', }, }, - proratedDiscount: undefined, - prorationCredit: undefined, + proratedDiscount: 'Giảm giá theo tỷ lệ', + prorationCredit: 'Tín dụng theo tỷ lệ', reSubscribe: 'Đăng ký lại', - seatBreakdownIncludedPlural: undefined, - seatBreakdownIncludedSingular: undefined, - seatBreakdownPlural: undefined, - seatBreakdownSingular: undefined, - seats: undefined, - seatsWithLimit: undefined, + seatBreakdownIncludedPlural: + '{{chargeable}} người dùng với giá {{rate}}/th ({{totalSeats}} tổng cộng - {{included}} bao gồm)', + seatBreakdownIncludedSingular: '1 người dùng với giá {{rate}}/th ({{totalSeats}} tổng cộng - {{included}} bao gồm)', + seatBreakdownPlural: '{{chargeable}} người dùng với giá {{rate}}/th', + seatBreakdownSingular: '1 người dùng với giá {{rate}}/th', + seats: 'Người dùng', + seatsWithLimit: 'Người dùng (tối đa {{limit}})', seeAllFeatures: 'Xem tất cả tính năng', startFreeTrial: 'Bắt đầu dùng thử miễn phí', startFreeTrial__days: 'Bắt đầu dùng thử miễn phí {{days}} ngày', @@ -221,655 +222,691 @@ export const viVN: LocalizationResource = { trialStartedOn: 'Dùng thử bắt đầu vào', }, subtotal: 'Tổng cộng', - subtotalRenewal: undefined, + subtotalRenewal: 'Tổng cộng mỗi kỳ', switchPlan: 'Chuyển sang gói này', switchToAnnual: 'Chuyển sang hàng năm', switchToAnnualWithAnnualPrice: 'Chuyển sang gói năm {{price}} / năm', switchToMonthly: 'Chuyển sang hàng tháng', switchToMonthlyWithPrice: 'Chuyển sang gói tháng {{price}} / tháng', totalDue: 'Tổng cần thanh toán', - totalDuePerPeriod: undefined, + totalDuePerPeriod: 'Tổng mỗi kỳ', totalDueToday: 'Tổng cần thanh toán hôm nay', viewFeatures: 'Xem tính năng', viewPayment: 'Xem thanh toán', year: 'Năm', - yearAbbreviation: undefined, - yearPerUnit: undefined, - years: undefined, + yearAbbreviation: 'năm', + yearPerUnit: 'Năm trên {{unitName}}', + years: 'Năm', }, configureDirectorySync: { attributeMappingStep: { columns: { - clerkAttribute: undefined, - directoryAttribute: undefined, + clerkAttribute: 'Thuộc tính người dùng', + directoryAttribute: 'Thuộc tính thư mục', }, - subtitle: undefined, - title: undefined, + subtitle: + 'Các thuộc tính thư mục tiêu chuẩn đã được cấu hình sẵn. Các thuộc tính không được liệt kê tại đây sẽ bị bỏ qua.', + title: 'Xem lại thuộc tính', }, configureStep: { - actionLabel__generateToken: undefined, - actionLabel__replaceKey: undefined, - actionLabel__retry: undefined, - actionLabel__uploadKey: undefined, - badge__credentialsConfigured: undefined, - badge__credentialsMissing: undefined, - domainsLabel: undefined, - error__invalidKeyFile: undefined, + actionLabel__generateToken: 'Tạo token mới', + actionLabel__replaceKey: 'Thay thế JSON key', + actionLabel__retry: 'Thử lại', + actionLabel__uploadKey: 'Tải lên JSON key', + badge__credentialsConfigured: 'Đã cấu hình', + badge__credentialsMissing: 'Chưa cấu hình', + domainsLabel: 'Tên miền:', + error__invalidKeyFile: 'Tệp đó không phải JSON hợp lệ. Hãy tải lên tệp key đã tải xuống từ Google.', error__ssoRequired: { - subtitle: undefined, - title: undefined, - }, - formFieldHint__subjectEmail: undefined, - formFieldInputPlaceholder__subjectEmail: undefined, - formFieldInputPlaceholder__token: undefined, - formFieldLabel__endpointUrl: undefined, - formFieldLabel__serviceAccountKey: undefined, - formFieldLabel__subjectEmail: undefined, - formFieldLabel__token: undefined, + subtitle: + 'Đồng bộ thư mục yêu cầu kết nối SSO. Hãy cấu hình và xác minh kết nối SSO của bạn trước, sau đó quay lại đây để thiết lập cấp phát.', + title: 'Chưa cấu hình Single Sign-On', + }, + formFieldHint__subjectEmail: + 'Thư mục được đọc dưới quyền quản trị viên này. Người này phải là quản trị viên Workspace đang hoạt động.', + formFieldInputPlaceholder__subjectEmail: 'admin@yourcompany.com', + formFieldInputPlaceholder__token: 'Tạo token mới để hiển thị', + formFieldLabel__endpointUrl: 'SCIM endpoint URL', + formFieldLabel__serviceAccountKey: 'Khóa tài khoản dịch vụ', + formFieldLabel__subjectEmail: 'Email quản trị viên Google Workspace', + formFieldLabel__token: 'Bearer token', instructions: { - actionLabel__toggle: undefined, + actionLabel__toggle: 'Xem hướng dẫn', custom: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, + step1: 'Tạo tích hợp cấp phát SCIM 2.0 trong nhà cung cấp danh tính của bạn.', + step2: 'Dán SCIM endpoint URL làm URL cơ sở cho tích hợp.', + step3: 'Cấu hình tích hợp để xác thực bằng bearer token bên dưới.', + step4: 'Bật cấp phát cho các sự kiện tạo, cập nhật và hủy kích hoạt người dùng.', }, entra: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, + step1: + 'Trong trung tâm quản trị Microsoft Entra, mở Enterprise applications và chọn ứng dụng dùng cho kết nối SSO của bạn.', + step2: + 'Trong mục Connectivity, dán SCIM endpoint URL làm Tenant URL và bearer token làm Secret Token, sau đó chọn Test Connection.', + step3: 'Chọn Provisioning và đặt chế độ cấp phát thành Automatic.', + step4: 'Gán người dùng và nhóm cần cấp phát, sau đó bật provisioning sang On.', }, google: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - step5: undefined, + step1: + 'Trong Google Cloud console, tạo dự án và tài khoản dịch vụ, sau đó tạo JSON key cho tài khoản đó và tải tệp xuống.', + step2: 'Bật Admin SDK API cho dự án đó.', + step3: + 'Trong Google Admin console, mở Security, sau đó mở API controls, rồi mở Domain-wide delegation, và thêm tài khoản dịch vụ bằng client ID của tài khoản đó.', + step4: + 'Cấp quyền thư mục chỉ đọc với các scope: https://www.googleapis.com/auth/admin.directory.user.readonly và https://www.googleapis.com/auth/admin.directory.group.readonly.', + step5: 'Tải lên JSON key bên dưới và nhập email của quản trị viên Google Workspace để đọc thư mục.', }, okta: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, + step1: 'Trong Okta Admin Console, mở ứng dụng dùng cho kết nối SSO của bạn.', + step2: 'Mở tab Provisioning và chọn mục Integration.', + step3: 'Dán SCIM endpoint URL và bearer token có bên dưới.', + step4: 'Đối với các hành động cấp phát, hãy bật đẩy New Users, Profile Updates và Groups.', }, }, - notice__tokenShownOnce: undefined, - subtitle: undefined, - title: undefined, - warning__ssoInactive: undefined, + notice__tokenShownOnce: 'Token này chỉ hiển thị một lần. Tạo token mới nếu bạn làm mất token.', + subtitle: 'Thêm các thông tin xác thực này vào nhà cung cấp danh tính của bạn để cấu hình Đồng bộ thư mục', + title: 'Cấu hình', + warning__ssoInactive: + 'Kết nối SSO này đã được cấu hình nhưng chưa hoạt động. Bạn có thể cấp phát thành viên, nhưng họ sẽ không thể đăng nhập cho đến khi kết nối hoạt động.', }, navbar: { - title: undefined, + title: 'Cấu hình Đồng bộ thư mục', }, providers: { - custom: undefined, - entra: undefined, - google: undefined, - okta: undefined, + custom: 'Nhà cung cấp SCIM tùy chỉnh', + entra: 'Microsoft Entra ID', + google: 'Google Workspace', + okta: 'Okta Workforce', }, roleMappingStep: { - actionHint__reorder: undefined, - actionLabel__reorder: undefined, + actionHint__reorder: 'Kéo để sắp xếp lại, hoặc dùng các phím mũi tên', + actionLabel__reorder: 'Sắp xếp lại ánh xạ {{group}}', alert__missingManageMembersPermission: { - subtitle: undefined, - title: undefined, + subtitle: 'Hãy yêu cầu người có thể quản lý thành viên thay đổi đồng bộ vai trò hoặc ánh xạ vai trò nhóm.', + title: 'Ánh xạ vai trò ở chế độ chỉ đọc', }, columns: { - directoryGroup: undefined, - priority: undefined, - role: undefined, + directoryGroup: 'Nhóm thư mục', + priority: 'Ưu tiên', + role: 'Vai trò', }, disableDialog: { - cancelButton: undefined, - confirmButton: undefined, - subtitle: undefined, - title: undefined, + cancelButton: 'Hủy', + confirmButton: 'Tắt đồng bộ vai trò', + subtitle: + 'Thành viên giữ nguyên vai trò hiện tại, nhưng thành viên mới sẽ không nhận vai trò từ nhóm thư mục. Ánh xạ của bạn được lưu lại, và khi bật lại đồng bộ vai trò, các ánh xạ sẽ được áp dụng lại cho mọi thành viên, ghi đè mọi thay đổi vai trò thủ công.', + title: 'Tắt đồng bộ vai trò', }, empty__noGroups: { - subtitle: undefined, - title: undefined, + subtitle: 'Đẩy nhóm từ {{provider}} và các nhóm sẽ hiển thị tại đây, sẵn sàng để ánh xạ.', + title: 'Chưa cấp phát nhóm nào', }, enableDialog: { - cancelButton: undefined, - confirmButton: undefined, - subtitle: undefined, - title: undefined, - }, - error__loadMappings: undefined, - everyoneElse: undefined, - formFieldLabel__syncRoles: undefined, - roleOption__unassigned: undefined, - subtitle: undefined, - title: undefined, + cancelButton: 'Hủy', + confirmButton: 'Bật đồng bộ vai trò', + subtitle: + 'Vai trò tổ chức của thành viên sẽ bị ghi đè bởi vai trò được ánh xạ từ nhóm thư mục của họ, bao gồm cả các vai trò đã gán thủ công.', + title: 'Bật đồng bộ vai trò', + }, + error__loadMappings: 'Không thể tải ánh xạ vai trò', + everyoneElse: 'Mọi người khác', + formFieldLabel__syncRoles: 'Đồng bộ vai trò', + roleOption__unassigned: 'Chưa gán', + subtitle: + 'Thành viên nhận vai trò từ nhóm thư mục mà họ thuộc về. Thành viên thuộc nhiều nhóm sẽ được gán vai trò có mức ưu tiên cao nhất.', + title: 'Ánh xạ vai trò', }, stepper: { - attributes: undefined, - configure: undefined, - roles: undefined, - test: undefined, + attributes: 'Thuộc tính', + configure: 'Cấu hình', + roles: 'Vai trò', + test: 'Kiểm tra', }, testStep: { - actionLabel__complete: undefined, - actionLabel__syncNow: undefined, - badge__active: undefined, - badge__deprovisioned: undefined, - description: undefined, - description__pull: undefined, - empty__noUsersProvisioned: undefined, - empty__waitingForFirstSync: undefined, - empty__waitingForFirstUser: undefined, - error__lastSyncFailed: undefined, - error__loadUsers: undefined, - error__syncFailed: undefined, - note: undefined, - noteLabel: undefined, - subtitle: undefined, + actionLabel__complete: 'Hoàn tất', + actionLabel__syncNow: 'Đồng bộ ngay', + badge__active: 'Đang hoạt động', + badge__deprovisioned: 'Đã hủy cấp phát', + description: + 'Người dùng sẽ xuất hiện tại đây khi nhà cung cấp danh tính của bạn cấp phát họ, hoạt động gần nhất hiển thị trước.', + description__pull: + 'Thư mục của bạn được đọc theo lịch. Bắt đầu đồng bộ để lấy người dùng ngay, hoạt động gần nhất hiển thị trước.', + empty__noUsersProvisioned: 'Chưa có người dùng nào được cấp phát.', + empty__waitingForFirstSync: 'Đang chờ lần đồng bộ đầu tiên hoàn tất…', + empty__waitingForFirstUser: 'Đang chờ người dùng được cấp phát đầu tiên…', + error__lastSyncFailed: 'Lần đồng bộ gần nhất đã thất bại', + error__loadUsers: 'Không thể tải người dùng đã cấp phát', + error__syncFailed: 'Không thể bắt đầu đồng bộ. Kiểm tra kết nối và thử lại.', + note: 'chỉ những người dùng có địa chỉ email thuộc tên miền đã cấu hình mới được xử lý.', + noteLabel: 'Lưu ý:', + subtitle: 'Gán hoặc đẩy người dùng thử nghiệm từ {{provider}} để xác minh cấp phát.', syncRow: { - neverSynced: undefined, - title: undefined, + neverSynced: 'Chưa đồng bộ', + title: 'Đồng bộ thư mục', }, - syncStatus__cancelled: undefined, - syncStatus__failed: undefined, - syncStatus__running: undefined, - syncStatus__succeeded: undefined, - title: undefined, + syncStatus__cancelled: 'Đã hủy', + syncStatus__failed: 'Thất bại', + syncStatus__running: 'Đang chạy', + syncStatus__succeeded: 'Thành công', + title: 'Kiểm tra cấp phát', }, }, configureSSO: { activate: { - activateButton: undefined, - activeSubtitle: undefined, - activeTitle: undefined, - doneButton: undefined, - skipButton: undefined, - subtitle: undefined, - title: undefined, + activateButton: 'Kích hoạt SSO', + activeSubtitle: 'Bất kỳ ai đăng nhập bằng {{domain}} đều phải sử dụng nhà cung cấp danh tính của bạn.', + activeTitle: 'Kết nối SSO đang hoạt động', + doneButton: 'Hoàn tất', + skipButton: 'Bỏ qua', + subtitle: + 'Kết nối SSO của bạn đã sẵn sàng. Sau khi kích hoạt, bất kỳ ai đăng nhập bằng {{domain}} đều phải sử dụng nhà cung cấp danh tính của bạn.', + title: 'Kết nối SSO đã được cấu hình', }, changeProviderDialog: { - cancelButton: undefined, - confirmButton: undefined, - subtitle: undefined, - title: undefined, + cancelButton: 'Hủy', + confirmButton: 'Đổi nhà cung cấp', + subtitle: 'Chuyển sang {{provider}} sẽ xóa kết nối {{currentProvider}} "{{name}}" và yêu cầu thiết lập mới.', + title: 'Đổi nhà cung cấp sang {{provider}}', }, configureStep: { activeConnectionWarning: { - dismiss: undefined, - title: undefined, + dismiss: 'Bỏ qua', + title: + 'Kết nối này đang hoạt động. Việc lưu thay đổi sẽ áp dụng ngay lập tức và có thể làm gián đoạn đăng nhập của các thành viên hiện tại.', }, attributeMappingTable: { badges: { - optional: undefined, - required: undefined, + optional: 'Tùy chọn', + required: 'Bắt buộc', }, }, oidcCustom: { credentialsStep: { clientId: { - label: undefined, - placeholder: undefined, + label: 'Client ID', + placeholder: 'Dán Client ID tại đây...', }, clientSecret: { - label: undefined, - placeholder: undefined, + label: 'Client secret', + placeholder: 'Dán Client secret tại đây...', }, - headerSubtitle: undefined, - paragraph: undefined, + headerSubtitle: 'Thêm thông tin xác thực ứng dụng của bạn', + paragraph: 'Trong ứng dụng OIDC của nhà cung cấp danh tính của bạn, hãy lấy các giá trị này.', }, endpointsStep: { discoveryUrl: { - description: undefined, - label: undefined, - placeholder: undefined, + description: + 'Trong ứng dụng OIDC của nhà cung cấp danh tính của bạn, hãy lấy Discovery endpoint. Dán vào bên dưới.', + label: 'Discovery endpoint', + placeholder: 'Dán URL tại đây...', }, - headerSubtitle: undefined, + headerSubtitle: 'Thêm các endpoint của nhà cung cấp danh tính của bạn', manual: { authUrl: { - label: undefined, - placeholder: undefined, + label: 'Authorization URL', + placeholder: 'Dán URL tại đây...', }, - description: undefined, + description: 'Trong ứng dụng OIDC của nhà cung cấp danh tính của bạn, hãy lấy các giá trị này.', tokenUrl: { - label: undefined, - placeholder: undefined, + label: 'Token URL', + placeholder: 'Dán URL tại đây...', }, userInfoUrl: { - label: undefined, - placeholder: undefined, + label: 'User Info URL', + placeholder: 'Dán URL tại đây...', }, }, modes: { - ariaLabel: undefined, - discoveryUrl: undefined, - manual: undefined, + ariaLabel: 'Phương thức cấu hình endpoint OIDC', + discoveryUrl: 'Thêm qua Discovery endpoint', + manual: 'Cấu hình thủ công', }, }, - mainHeaderTitle: undefined, + mainHeaderTitle: 'Cấu hình nhà cung cấp danh tính của bạn', redirectUriStep: { claims: { - description: undefined, + description: 'Đảm bảo ID token của bạn bao gồm các claim sau:', table: { columns: { - attribute: undefined, - claim: undefined, + attribute: 'Thuộc tính Clerk', + claim: 'ID token claim', }, rows: { email: { - attribute: undefined, + attribute: 'Email chính', }, firstName: { - attribute: undefined, + attribute: 'Tên', }, lastName: { - attribute: undefined, + attribute: 'Họ', }, subject: { - attribute: undefined, + attribute: 'ID người dùng bên ngoài', }, }, }, }, - headerSubtitle: undefined, - paragraph: undefined, + headerSubtitle: 'Tạo ứng dụng OIDC mới trong bảng điều khiển của nhà cung cấp danh tính của bạn', + paragraph: + 'Trong bảng điều khiển của nhà cung cấp danh tính của bạn, hãy tạo ứng dụng OIDC mới hỗ trợ loại cấp mã ủy quyền và sử dụng Redirect URI sau:', redirectUri: { - label: undefined, + label: 'Redirect URI được ủy quyền', }, }, }, samlCustom: { assignUsersStep: { - headerSubtitle: undefined, - paragraph: undefined, + headerSubtitle: 'Gán người dùng hoặc nhóm cho ứng dụng SAML của bạn', + paragraph: 'Gán người dùng hoặc nhóm cho ứng dụng của bạn trước khi họ có thể đăng nhập bằng SSO.', }, attributeMappingStep: { attributeMappingTable: { columns: { - attributeName: undefined, - userAttribute: undefined, + attributeName: 'Tên thuộc tính', + userAttribute: 'Thuộc tính người dùng', }, rows: { email: { - attributeName: undefined, - userAttribute: undefined, + attributeName: 'Email chính', + userAttribute: 'mail', }, firstName: { - attributeName: undefined, - userAttribute: undefined, + attributeName: 'Tên', + userAttribute: 'firstName', }, lastName: { - attributeName: undefined, - userAttribute: undefined, + attributeName: 'Họ', + userAttribute: 'lastName', }, }, }, - headerSubtitle: undefined, - paragraph: undefined, + headerSubtitle: 'Ánh xạ thuộc tính người dùng từ nhà cung cấp danh tính của bạn tới ứng dụng của bạn.', + paragraph: 'Phản hồi SAML của bạn phải bao gồm các thuộc tính sau:', }, createAppStep: { createAppInstructions: { - paragraph: undefined, + paragraph: + 'Trong bảng điều khiển của nhà cung cấp danh tính của bạn, hãy tạo ứng dụng SAML 2.0 mới và sử dụng các chi tiết nhà cung cấp dịch vụ sau:', }, - headerSubtitle: undefined, + headerSubtitle: 'Tạo ứng dụng SAML mới trong bảng điều khiển của nhà cung cấp danh tính của bạn', serviceProviderFields: { acsUrl: { - label: undefined, + label: 'URL dịch vụ tiếp nhận khẳng định (ACS URL)', }, spEntityId: { - label: undefined, + label: 'Entity ID', }, }, }, identityProviderMetadataStep: { - headerSubtitle: undefined, + headerSubtitle: 'Cấu hình metadata của nhà cung cấp danh tính', manual: { - description: undefined, + description: 'Trong ứng dụng SAML của nhà cung cấp danh tính của bạn, hãy lấy các giá trị này.', issuer: { - label: undefined, - placeholder: undefined, + label: 'Issuer', + placeholder: 'Dán URL tại đây...', }, signOnUrl: { - label: undefined, - placeholder: undefined, + label: 'URL đăng nhập', + placeholder: 'Dán URL tại đây...', }, signingCertificate: { - fileUploaded: undefined, - label: undefined, - removeFile: undefined, - replaceFile: undefined, - uploadFile: undefined, + fileUploaded: 'Đã tải tệp lên', + label: 'Chứng chỉ ký', + removeFile: 'Xóa tệp', + replaceFile: 'Thay thế tệp', + uploadFile: 'Tải tệp lên', }, }, metadataUrl: { - description: undefined, - label: undefined, - placeholder: undefined, + description: + 'Trong ứng dụng SAML của nhà cung cấp danh tính của bạn, hãy lấy Metadata URL. Dán vào bên dưới.', + label: 'Metadata URL', + placeholder: 'Dán URL tại đây...', }, modes: { - ariaLabel: undefined, - manual: undefined, - metadataUrl: undefined, + ariaLabel: 'Cấu hình', + manual: 'Cấu hình thủ công', + metadataUrl: 'Thêm qua metadata', }, }, - mainHeaderTitle: undefined, + mainHeaderTitle: 'Cấu hình nhà cung cấp danh tính của bạn', }, samlGoogle: { attributeMappingStep: { attributeMappingTable: { columns: { - appAttribute: undefined, - googleAttribute: undefined, + appAttribute: 'Thuộc tính ứng dụng', + googleAttribute: 'Thuộc tính Google', }, rows: { email: { - appAttribute: undefined, - googleAttribute: undefined, + appAttribute: 'email', + googleAttribute: 'Email chính', }, firstName: { - appAttribute: undefined, - googleAttribute: undefined, + appAttribute: 'firstName', + googleAttribute: 'Tên', }, lastName: { - appAttribute: undefined, - googleAttribute: undefined, + appAttribute: 'lastName', + googleAttribute: 'Họ', }, }, }, - headerSubtitle: undefined, - paragraph: undefined, - step1: undefined, - step2: undefined, + headerSubtitle: 'Ánh xạ thuộc tính người dùng từ Google Workspace tới ứng dụng của bạn', + paragraph: 'Chúng tôi yêu cầu phản hồi SAML của bạn trả về email, tên và họ của người dùng.', + step1: 'Trong Google Admin Console, hãy tìm mục Attributes.', + step2: + 'Chọn Add mapping cho từng thuộc tính và nhập thuộc tính Google và thuộc tính ứng dụng sau:', }, configureUserAccess: { assignUsersInstructions: { - paragraph1: undefined, - paragraph2: undefined, - step1: undefined, - step2: undefined, - step3: undefined, + paragraph1: + 'Sau khi hoàn tất cấu hình trong Google, bạn sẽ được chuyển hướng tới trang tổng quan của ứng dụng.', + paragraph2: + 'Google có thể mất tới 24 giờ để áp dụng các thay đổi này. Kết nối sẽ vẫn ở trạng thái không hoạt động cho đến khi các thay đổi có hiệu lực.', + step1: 'Mở mục User access.', + step2: 'Chọn ON for everyone.', + step3: 'Chọn Save.', }, - headerSubtitle: undefined, + headerSubtitle: 'Bật ứng dụng SAML Google Workspace của bạn', }, createAppStep: { createAppInstructions: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - title: undefined, + step1: 'Trong thanh điều hướng bên, dưới mục Apps, hãy chọn Web and mobile apps.', + step2: 'Chọn Add app, sau đó chọn Add custom SAML app.', + step3: 'Nhập App name.', + step4: 'Chọn Continue.', + title: 'Trong Google Workspace, hãy tạo ứng dụng SAML mới:', }, - headerSubtitle: undefined, + headerSubtitle: 'Tạo ứng dụng SAML mới trong Google Workspace', }, identityProviderMetadataStep: { - headerSubtitle: undefined, + headerSubtitle: 'Thêm metadata ứng dụng Google Workspace của bạn', manual: { - description: undefined, + description: 'Trong ứng dụng Google Workspace của bạn, hãy lấy các giá trị này.', issuer: { - label: undefined, - placeholder: undefined, + label: 'Entity ID', + placeholder: 'Dán URL tại đây...', }, signOnUrl: { - label: undefined, - placeholder: undefined, + label: 'SSO URL', + placeholder: 'Dán URL tại đây...', }, signingCertificate: { - fileUploaded: undefined, - label: undefined, - removeFile: undefined, - replaceFile: undefined, - uploadFile: undefined, + fileUploaded: 'Đã tải tệp lên', + label: 'Chứng chỉ ký', + removeFile: 'Xóa tệp', + replaceFile: 'Thay thế tệp', + uploadFile: 'Tải tệp lên', }, }, metadataFile: { - description: undefined, - fileUploaded: undefined, - label: undefined, - removeFile: undefined, - replaceFile: undefined, - uploadFile: undefined, + description: 'Trong ứng dụng Google Workspace của bạn, hãy tải xuống metadata IdP và tải lên bên dưới.', + fileUploaded: 'Đã tải tệp lên', + label: 'Metadata IdP', + removeFile: 'Xóa tệp', + replaceFile: 'Thay thế tệp', + uploadFile: 'Tải tệp lên', }, modes: { - ariaLabel: undefined, - manual: undefined, - metadataFile: undefined, + ariaLabel: 'Cấu hình', + manual: 'Cấu hình thủ công', + metadataFile: 'Thêm qua metadata', }, }, - mainHeaderTitle: undefined, + mainHeaderTitle: 'Cấu hình Google Workspace', serviceProviderStep: { - headerSubtitle: undefined, + headerSubtitle: 'Cấu hình nhà cung cấp dịch vụ', nameIdInstructions: { - step1: undefined, - step2: undefined, + step1: + 'Trong mục Name ID, hãy chọn danh sách định dạng Name ID và chọn Email.', + step2: 'Chọn Continue', }, - paragraph: undefined, + paragraph: + 'Để cấu hình nhà cung cấp dịch vụ của bạn, bạn phải thêm hai trường này vào ứng dụng SAML Google Workspace của bạn:', serviceProviderFields: { acsUrl: { - label: undefined, + label: 'ACS URL', }, spEntityId: { - label: undefined, + label: 'Entity ID', }, }, - title: undefined, + title: 'Cấu hình nhà cung cấp dịch vụ', }, }, samlMicrosoft: { attributeMappingStep: { attributeMappingTable: { columns: { - attribute: undefined, - claimName: undefined, - value: undefined, + attribute: 'Thuộc tính', + claimName: 'Tên claim', + value: 'Giá trị', }, - copyClaimName: undefined, - copyClaimNameCopied: undefined, + copyClaimName: 'Sao chép tên claim', + copyClaimNameCopied: 'Đã sao chép', rows: { email: { - attribute: undefined, - claimName: undefined, - value: undefined, + attribute: 'Địa chỉ email', + claimName: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress', + value: 'user.mail', }, firstName: { - attribute: undefined, - claimName: undefined, - value: undefined, + attribute: 'Tên', + claimName: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname', + value: 'user.givenname', }, lastName: { - attribute: undefined, - claimName: undefined, - value: undefined, + attribute: 'Họ', + claimName: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname', + value: 'user.surname', }, }, }, - headerSubtitle: undefined, - step1: undefined, - step2: undefined, - title: undefined, + headerSubtitle: 'Thiết lập các thuộc tính mà Microsoft Entra bao gồm trong phản hồi SAML của bạn', + step1: 'Trên trang SAML-based Sign-on, hãy tìm mục Attributes & Claims.', + step2: 'Chọn Edit.', + title: 'Phản hồi SAML của bạn phải bao gồm các thuộc tính sau:', }, createAppStep: { assignUsersInstructions: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - step5: undefined, - title: undefined, + step1: 'Trong mục Getting Started, hãy chọn Assign users and groups.', + step2: + 'Chọn Add user/group. Bạn sẽ được chuyển hướng tới trang Add Assignment page.', + step3: 'Chọn liên kết None Selected link.', + step4: + 'Chọn Select ở cuối trang. Bạn sẽ được chuyển hướng tới trang Add Assignment.', + step5: 'Chọn Assign', + title: 'Gán người dùng hoặc nhóm của bạn trong Microsoft', }, createAppInstructions: { - step1: undefined, - step2: undefined, - step3: undefined, + step1: 'Đăng nhập vào Microsoft Azure Portal và truy cập Enterprise applications.', + step2: + 'Nhấp vào New application. Bạn sẽ được chuyển hướng tới trang Browse Microsoft Entra Gallery.', + step3: 'Chọn Create your own application.', step4: { - label: undefined, + label: 'Trong hộp thoại mở ra:', subSteps: { - appName: undefined, - create: undefined, - nonGallery: undefined, + appName: 'Nhập tên ứng dụng của bạn.', + create: 'Chọn Create.', + nonGallery: + "Chọn Integrate any other application you don't find in the gallery (Non-gallery).", }, }, - title: undefined, + title: 'Tạo ứng dụng doanh nghiệp mới', }, - headerSubtitle: undefined, + headerSubtitle: 'Tạo ứng dụng doanh nghiệp mới trong Azure Portal của bạn', }, identityProviderMetadataStep: { - headerSubtitle: undefined, + headerSubtitle: 'Thêm metadata ứng dụng Microsoft Entra của bạn', manual: { - description: undefined, + description: + 'Trên trang SAML-based Sign-on, tìm mục SAML Certificates. Lấy các giá trị này và thêm vào bên dưới.', issuer: { - label: undefined, - placeholder: undefined, + label: 'Issuer', + placeholder: 'Dán URL vào đây...', }, signOnUrl: { - label: undefined, - placeholder: undefined, + label: 'URL đăng nhập', + placeholder: 'Dán URL vào đây...', }, signingCertificate: { - fileUploaded: undefined, - label: undefined, - removeFile: undefined, - replaceFile: undefined, - uploadFile: undefined, + fileUploaded: 'Đã tải tệp lên', + label: 'Chứng chỉ ký', + removeFile: 'Xóa tệp', + replaceFile: 'Thay thế tệp', + uploadFile: 'Tải tệp lên', }, }, metadataUrl: { - description: undefined, - label: undefined, - placeholder: undefined, + description: + 'Trên trang SAML-based Sign-on, tìm mục SAML Certificates và sao chép App Federation Metadata Url. Dán vào bên dưới.', + label: 'Metadata URL', + placeholder: 'Dán URL vào đây...', }, modes: { - ariaLabel: undefined, - manual: undefined, - metadataUrl: undefined, + ariaLabel: 'Cấu hình ', + manual: 'Cấu hình thủ công', + metadataUrl: 'Thêm qua metadata', }, }, - mainHeaderTitle: undefined, + mainHeaderTitle: 'Cấu hình Microsoft Entra', serviceProviderStep: { - headerSubtitle: undefined, + headerSubtitle: 'Thêm cấu hình nhà cung cấp dịch vụ vào Microsoft Entra', serviceProviderFields: { acsUrl: { - label: undefined, + label: 'URL phản hồi (Assertion Consumer Service URL)', }, spEntityId: { - label: undefined, + label: 'Định danh (Entity ID)', }, }, - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - step5: undefined, - step6: undefined, - title: undefined, + step1: 'Trong thanh điều hướng bên, mở menu thả xuống Manage và chọn Single sign-on.', + step2: 'Trong mục Select a single sign-on method, chọn SAML.', + step3: 'Tìm mục Basic SAML Configuration.', + step4: 'Chọn Edit. Bảng Basic SAML Configuration sẽ mở ra.', + step5: + 'Sao chép các giá trị sau vào Identifier (Entity ID) và Reply URL (ACS URL):', + step6: 'Chọn Save ở đầu bảng. Đóng bảng.', + title: 'Thêm chi tiết nhà cung cấp dịch vụ', }, }, samlOkta: { assignUsersStep: { assignUsersInstructions: { - paragraph: undefined, - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - step5: undefined, + paragraph: 'Gán người dùng hoặc nhóm cho ứng dụng Okta của bạn trước khi họ có thể đăng nhập bằng SSO', + step1: 'Trong bảng điều khiển Okta, chọn tab Assignments.', + step2: + 'Mở menu thả xuống Assign và chọn Assign to people hoặc Assign to groups.', + step3: 'Tìm kiếm người dùng hoặc nhóm cần gán.', + step4: 'Nhấp Assign bên cạnh người dùng hoặc nhóm.', + step5: 'Nhấp Done.', }, - headerSubtitle: undefined, + headerSubtitle: 'Gán người dùng cho ứng dụng Okta của bạn', }, attributeMappingStep: { attributeMappingTable: { columns: { - expression: undefined, - name: undefined, + expression: 'Biểu thức', + name: 'Tên thuộc tính', }, rows: { email: { - expression: undefined, - name: undefined, + expression: 'user.profile.email', + name: 'mail', }, firstName: { - expression: undefined, - name: undefined, + expression: 'user.profile.firstName', + name: 'firstName', }, lastName: { - expression: undefined, - name: undefined, + expression: 'user.profile.lastName', + name: 'lastName', }, }, }, - headerSubtitle: undefined, - paragraph: undefined, - step1: undefined, - step2: undefined, + headerSubtitle: 'Thiết lập các thuộc tính mà Okta đưa vào phản hồi SAML của bạn', + paragraph: 'Phản hồi SAML của bạn phải bao gồm các thuộc tính sau:', + step1: 'Trong bảng điều khiển Okta, tìm mục Attribute Statements.', + step2: 'Chọn Add Expression cho từng thuộc tính và nhập các cặp tên và biểu thức sau:', }, createAppStep: { completeSamlIntegrationInstructions: { - step1: undefined, - step2: undefined, - title: undefined, + step1: 'Trong mục Feedback, chọn This is an internal app that we have created.', + step2: 'Nhấp Finish để hoàn tất tích hợp.', + title: 'Hoàn tất tích hợp SAML', }, createAppInstructions: { - step1: undefined, - step2: undefined, - step3: undefined, - step4: undefined, - title: undefined, + step1: 'Đăng nhập vào Okta và đi tới Admin → Applications.', + step2: 'Nhấp Create App Integration. và chọn SAML 2.0.', + step3: 'Điền Cài đặt chung. Tên ứng dụng là bắt buộc.', + step4: 'Nhấp Next để hoàn tất việc tạo ứng dụng.', + title: 'Tạo ứng dụng SAML mới trong Okta', }, - headerSubtitle: undefined, + headerSubtitle: 'Tạo và cấu hình ứng dụng SAML trong Okta Dashboard của bạn', serviceProviderInstructions: { - paragraph1: undefined, - paragraph2: undefined, + paragraph1: + 'Sau khi hoàn tất General Settings, bạn sẽ thấy trang Configure SAML.', + paragraph2: 'Thêm hai trường này vào ứng dụng Okta của bạn để cấu hình nhà cung cấp dịch vụ.', serviceProviderFields: { acsUrl: { - label: undefined, + label: 'URL đăng nhập một lần', }, spEntityId: { - label: undefined, + label: 'URI đối tượng (SP Entity ID)', }, }, - title: undefined, + title: 'Cấu hình nhà cung cấp dịch vụ', }, }, identityProviderMetadataStep: { - headerSubtitle: undefined, + headerSubtitle: 'Thêm metadata ứng dụng Okta của bạn', manual: { - description: undefined, + description: 'Trong ứng dụng SAML Okta của bạn, đi tới tab Sign On và lấy các giá trị này.', issuer: { - label: undefined, - placeholder: undefined, + label: 'Issuer', + placeholder: 'Dán URL vào đây...', }, signOnUrl: { - label: undefined, - placeholder: undefined, + label: 'URL đăng nhập', + placeholder: 'Dán URL vào đây...', }, signingCertificate: { - fileUploaded: undefined, - label: undefined, - removeFile: undefined, - replaceFile: undefined, - uploadFile: undefined, + fileUploaded: 'Đã tải tệp lên', + label: 'Chứng chỉ ký', + removeFile: 'Xóa tệp', + replaceFile: 'Thay thế tệp', + uploadFile: 'Tải tệp lên', }, }, metadataUrl: { - description: undefined, - label: undefined, - placeholder: undefined, + description: + 'Trong ứng dụng SAML Okta của bạn, đi tới tab Sign On và lấy Metadata URL. Dán vào bên dưới.', + label: 'Metadata URL', + placeholder: 'Dán URL vào đây...', }, modes: { - ariaLabel: undefined, - manual: undefined, - metadataUrl: undefined, + ariaLabel: 'Cấu hình', + manual: 'Cấu hình thủ công', + metadataUrl: 'Thêm qua metadata', }, }, - mainHeaderTitle: undefined, + mainHeaderTitle: 'Cấu hình Okta Workforce', }, unsupportedProvider: { - description: undefined, - title: undefined, + description: + 'Nhà cung cấp danh tính này không được hỗ trợ trong phiên bản Clerk này. Vui lòng cập nhật lên phiên bản mới nhất để hoàn tất thiết lập.', + title: 'Nhà cung cấp không được hỗ trợ', }, }, connectionScopeBanner: { - subtitle__adding: undefined, - subtitle__editing: undefined, - title__adding: undefined, - title__editing: undefined, + subtitle__adding: 'Tổ chức này đã có {{count}} kết nối SSO.', + subtitle__editing: 'Tổ chức này có {{count}} kết nối SSO. Các thay đổi tại đây chỉ áp dụng cho kết nối này.', + title__adding: 'Đang thêm kết nối SSO mới', + title__editing: 'Đang chỉnh sửa "{{name}}"', }, missingManageEnterpriseConnectionsPermission: { subtitle: 'Liên hệ với quản trị viên tổ chức của bạn để nâng cấp quyền của bạn.', @@ -880,15 +917,16 @@ export const viVN: LocalizationResource = { }, organizationDomainsStep: { domainCard: { - badge__claimed: undefined, - badge__expired: undefined, + badge__claimed: 'Đang được kết nối khác sử dụng', + badge__expired: 'Đã hết hạn', badge__unverified: 'Chưa xác minh', badge__verified: 'Đã xác minh', - checkboxLabel: undefined, - expiredAtLabel: undefined, - expiredLabel: undefined, - removeButtonTooltip__lastVerifiedDomain: undefined, - removeButtonTooltip__lastVerifiedDomainActive: undefined, + checkboxLabel: 'Sử dụng {{domain}} cho kết nối này', + expiredAtLabel: + "Xác minh tên miền đã hết hạn vào {{ date | shortDate('vi-VN') }}. Vui lòng xác minh lại để tạo bản ghi DNS mới.", + expiredLabel: 'Xác minh tên miền đã hết hạn. Vui lòng xác minh lại để tạo bản ghi DNS mới.', + removeButtonTooltip__lastVerifiedDomain: 'Cần ít nhất một tên miền đã xác minh để thiết lập SSO.', + removeButtonTooltip__lastVerifiedDomainActive: 'Cần ít nhất một tên miền đã xác minh để duy trì SSO.', txtRecord: { hostLabel: 'Máy chủ / Tên', instructions: @@ -897,7 +935,7 @@ export const viVN: LocalizationResource = { valueLabel: 'Giá trị', }, verifiedAtLabel: "Đã xác minh vào {{ date | shortDate('vi-VN') }}", - verifyAgainButton: undefined, + verifyAgainButton: 'Xác minh lại', }, domainSuggestion: { formButtonPrimary__add: 'Thêm {{domain}}', @@ -907,33 +945,35 @@ export const viVN: LocalizationResource = { formFieldInputPlaceholder__domain: 'Thêm tên miền', formFieldLabel__domain: 'Tên miền', removeDomainDialog: { - cancelButton: undefined, - removeButton: undefined, - subtitle__active: undefined, - subtitle__inactive: undefined, - title: undefined, + cancelButton: 'Hủy', + removeButton: 'Xóa tên miền', + subtitle__active: + 'Bạn sắp xóa {{domain}} khỏi kết nối doanh nghiệp này. Người dùng sẽ không thể đăng nhập bằng {{domain}} nữa.', + subtitle__inactive: 'Bạn sắp xóa {{domain}} khỏi kết nối doanh nghiệp này.', + title: 'Đang xóa tên miền', }, subtitle: 'Thêm và xác minh quyền sở hữu các tên miền mà tổ chức của bạn dùng để đăng nhập.', title: 'Thêm tên miền SSO', }, resetConnectionDialog: { - cancelButton: undefined, - confirmationFieldLabel: undefined, - confirmationFieldPlaceholder: undefined, - resetButton: undefined, - subtitle: undefined, - title: undefined, + cancelButton: 'Hủy', + confirmationFieldLabel: 'Nhập "{{name}}" bên dưới để tiếp tục', + confirmationFieldPlaceholder: '{{name}}', + resetButton: 'Đặt lại kết nối', + subtitle: + 'Bạn có chắc chắn muốn đặt lại kết nối "{{name}}" không? Hành động này không thể hoàn tác và bạn sẽ phải cấu hình lại tất cả các bước', + title: 'Đặt lại kết nối', }, selectProviderStep: { oidc: { - groupLabel: undefined, - oidcProvider: undefined, + groupLabel: 'OpenID Connect (OIDC)', + oidcProvider: 'Nhà cung cấp OIDC', }, saml: { customSaml: 'Nhà cung cấp SAML tùy chỉnh', - google: undefined, + google: 'Google Workspace', groupLabel: 'SAML', - microsoft: undefined, + microsoft: 'Microsoft Entra (trước đây là AD)', okta: 'Okta Workforce', }, subtitle: 'Chọn nhà cung cấp mà bạn sẽ thiết lập SSO cho.', @@ -941,79 +981,85 @@ export const viVN: LocalizationResource = { warning: 'Khi đã chọn nhà cung cấp, bạn không thể thay đổi cho đến khi cấu hình hoàn tất', }, signingCertificates: { - addCertificate: undefined, - expired: undefined, - expires: undefined, - expiryAfterSave: undefined, - fileUnreadable: undefined, - notACertificate: undefined, - primary: undefined, - primaryTooltip: undefined, - removeCertificate: undefined, + addCertificate: 'Thêm chứng chỉ', + expired: 'Đã hết hạn {{date}}', + expires: 'Hết hạn {{date}}', + expiryAfterSave: 'Ngày hết hạn sẽ hiển thị sau khi bạn lưu.', + fileUnreadable: 'Không thể đọc tệp. Vui lòng thử lại.', + notACertificate: 'Một trong các tệp đã tải lên không phải là chứng chỉ.', + primary: 'Chính', + primaryTooltip: 'Được kiểm tra trước khi xác minh đăng nhập. Mọi chứng chỉ trong danh sách này đều đáng tin cậy.', + removeCertificate: 'Xóa chứng chỉ', }, testConfigurationStep: { - error__noSuccessfulTestRun: undefined, - subtitle: undefined, + error__noSuccessfulTestRun: + 'Bạn cần ít nhất một lần chạy thử thành công trước khi tiếp tục. Vui lòng tạo URL thử nghiệm và hoàn tất quy trình đăng nhập.', + subtitle: 'Đăng nhập qua URL thử nghiệm để xác minh kết nối SSO của bạn đã được cấu hình đúng', testResults: { - actionLabel__refresh: undefined, + actionLabel__refresh: 'Làm mới nhật ký', empty: { - subtitle: undefined, - title: undefined, + subtitle: 'Chọn Open test URL để chạy lần kiểm thử đầu tiên', + title: 'Chưa có kết quả kiểm thử', }, - polling: undefined, - status__failed: undefined, - status__pending: undefined, - status__success: undefined, - title: undefined, + polling: 'Đang chờ lần chạy thử hoàn tất…', + status__failed: 'Thất bại', + status__pending: 'Đang chờ', + status__success: 'Thành công', + title: 'Kết quả kiểm thử của bạn', }, testRunDetails: { howToFix: { - actionLabel__viewDocumentation: undefined, + actionLabel__viewDocumentation: 'Xem tài liệu', oauth_access_denied: { - description: undefined, + description: + 'Lỗi này xảy ra khi người dùng nhấp Hủy hoặc Từ chối trên màn hình ủy quyền của nhà cung cấp OAuth, hoặc nhà cung cấp đã từ chối yêu cầu ủy quyền. Vui lòng xác minh rằng thông tin xác thực ứng dụng OAuth (Client ID và Client secret) đã được cấu hình đúng.', }, oauth_fetch_user_error: { - intro: undefined, - step1: undefined, - step2: undefined, + intro: 'Để khắc phục lỗi này, vui lòng thực hiện các bước sau:', + step1: + 'Xác minh rằng các phạm vi OAuth được cấu hình trong cài đặt kết nối của bạn bao gồm các quyền cần thiết để đọc thông tin hồ sơ người dùng.', + step2: 'Đảm bảo rằng URL điểm cuối thông tin người dùng đã được cấu hình đúng.', }, oauth_token_exchange_error: { - description: undefined, + description: + 'Vui lòng xác minh rằng Client ID và Client secret của ứng dụng OAuth của bạn đã được cấu hình đúng và khớp với thông tin xác thực từ bảng điều khiển của nhà cung cấp OAuth.', }, saml_email_address_domain_mismatch: { - description: undefined, + description: + 'Vui lòng xác minh rằng người dùng đang đăng nhập bằng địa chỉ email khớp với một trong các tên miền được phép cho kết nối này. Nếu cần thêm tên miền, hãy cập nhật các tên miền được phép trong cài đặt kết nối của bạn.', }, saml_response_relaystate_missing: { - description: undefined, + description: + 'Vui lòng kiểm tra rằng nhà cung cấp danh tính của bạn trả về đúng tham số RelayState đã được gửi trong yêu cầu ban đầu.', }, saml_user_attribute_missing: { - intro: undefined, - step1: undefined, - step2: undefined, - step3: undefined, + intro: 'Để khắc phục lỗi này, vui lòng thực hiện các bước sau:', + step1: 'Truy cập bảng điều khiển cấu hình của nhà cung cấp danh tính của bạn.', + step2: 'Điều hướng đến cài đặt SAML của ứng dụng hoặc cấu hình ánh xạ thuộc tính.', + step3: "Đảm bảo rằng thuộc tính 'mail' được ánh xạ đúng tới trường địa chỉ email của người dùng.", }, - sectionTitle: undefined, + sectionTitle: 'Cách khắc phục', }, parsedUserInfo: { - email: undefined, - firstName: undefined, - sectionTitle: undefined, + email: 'Email', + firstName: 'Tên', + sectionTitle: 'Thông tin người dùng đã phân tích', }, runDetails: { - actionLabel__copied: undefined, - actionLabel__copy: undefined, - errorCode: undefined, - fullMessage: undefined, - sectionTitle: undefined, - status: undefined, - timestamp: undefined, + actionLabel__copied: 'Đã sao chép', + actionLabel__copy: 'Sao chép thông báo', + errorCode: 'Mã lỗi', + fullMessage: 'Thông báo đầy đủ', + sectionTitle: 'Chi tiết lần chạy', + status: 'Trạng thái', + timestamp: 'Dấu thời gian', }, - title: undefined, + title: 'Lần chạy thử', }, testUrl: { - actionLabel__open: undefined, + actionLabel__open: 'Mở URL thử nghiệm', }, - title: undefined, + title: 'Kiểm thử kết nối SSO của bạn', }, }, createOrganization: { @@ -1064,7 +1110,7 @@ export const viVN: LocalizationResource = { formFieldInputPlaceholder__organizationSlug: 'my-org', formFieldInputPlaceholder__password: 'Nhập mật khẩu của bạn', formFieldInputPlaceholder__phoneNumber: 'Nhập số điện thoại của bạn', - formFieldInputPlaceholder__signUpPassword: undefined, + formFieldInputPlaceholder__signUpPassword: 'Tạo mật khẩu', formFieldInputPlaceholder__username: 'Nhập tên người dùng của bạn', formFieldInput__emailAddress_format: 'Định dạng ví dụ: name@example.com', formFieldLabel__apiKey: 'Khóa API', @@ -1095,9 +1141,9 @@ export const viVN: LocalizationResource = { formFieldLabel__role: 'Vai trò', formFieldLabel__signOutOfOtherSessions: 'Đăng xuất khỏi tất cả thiết bị khác', formFieldLabel__username: 'Tên người dùng', - identityPreviewEditButton__emailAddress: undefined, - identityPreviewEditButton__identifier: undefined, - identityPreviewEditButton__phoneNumber: undefined, + identityPreviewEditButton__emailAddress: 'Chỉnh sửa địa chỉ email', + identityPreviewEditButton__identifier: 'Chỉnh sửa định danh', + identityPreviewEditButton__phoneNumber: 'Chỉnh sửa số điện thoại', impersonationFab: { action__signOut: 'Đăng xuất', title: 'Đăng nhập với {{identifier}}', @@ -1108,61 +1154,63 @@ export const viVN: LocalizationResource = { membershipRole__basicMember: 'Thành viên', membershipRole__guestMember: 'Khách', oauthConsent: { - action__allow: undefined, - action__deny: undefined, - offlineAccessNotice: undefined, - redirectNotice: undefined, + action__allow: 'Cho phép', + action__deny: 'Từ chối', + offlineAccessNotice: 'Bạn sẽ vẫn đăng nhập cho đến khi bạn đăng xuất hoặc thu hồi quyền truy cập.', + redirectNotice: 'Nếu bạn cho phép truy cập, ứng dụng này sẽ chuyển hướng bạn đến {{domainAction}}.', redirectUriModal: { - subtitle: undefined, - title: undefined, + subtitle: 'Hãy đảm bảo bạn tin tưởng {{applicationName}} và URL này thuộc về {{applicationName}}.', + title: 'URL chuyển hướng', }, scopeList: { - privateMetadata: undefined, - title: undefined, - }, - subtitle: undefined, - viewFullUrl: undefined, - warning: undefined, + privateMetadata: + 'Siêu dữ liệu riêng tư của bạn do {{applicationName}} thiết lập, có thể bao gồm thông tin nhạy cảm', + title: 'Điều này sẽ cho phép {{applicationName}} truy cập vào:', + }, + subtitle: 'muốn truy cập {{applicationName}} thay mặt cho {{identifier}}', + viewFullUrl: 'Xem URL đầy đủ', + warning: + 'Hãy đảm bảo bạn tin tưởng {{applicationName}} ({{domainAction}}). Bạn có thể đang chia sẻ dữ liệu nhạy cảm với trang web hoặc ứng dụng này.', }, oauthDeviceVerification: { - action__tryAnotherCode: undefined, + action__tryAnotherCode: 'Nhập mã khác', confirmation: { - action__approve: undefined, - action__deny: undefined, - scopeListTitle: undefined, - subtitle: undefined, - title: undefined, - warning: undefined, + action__approve: 'Phê duyệt', + action__deny: 'Từ chối', + scopeListTitle: 'Điều này sẽ cho phép {{applicationName}} truy cập vào:', + subtitle: 'Xác nhận yêu cầu này cho {{identifier}}', + title: 'Cho phép {{applicationName}} truy cập tài khoản của bạn?', + warning: 'Chỉ phê duyệt yêu cầu này nếu bạn đã bắt đầu nó trên thiết bị khác của mình.', }, error: { - expiredSubtitle: undefined, - expiredTitle: undefined, - genericSubtitle: undefined, - genericTitle: undefined, - invalidCode: undefined, - rateLimitedSubtitle: undefined, - rateLimitedTitle: undefined, - unknownCode: undefined, + expiredSubtitle: 'Hãy bắt đầu lại trên thiết bị của bạn.', + expiredTitle: 'Mã này đã hết hạn', + genericSubtitle: 'Kiểm tra kết nối của bạn và thử lại.', + genericTitle: 'Chúng tôi không thể xác minh mã này', + invalidCode: 'Nhập mã hợp lệ gồm 8 ký tự.', + rateLimitedSubtitle: 'Vui lòng chờ trước khi thử mã khác.', + rateLimitedTitle: 'Quá nhiều lần thử', + unknownCode: 'Chúng tôi không tìm thấy mã đó. Hãy kiểm tra và thử lại.', }, start: { - action__continue: undefined, - subtitle: undefined, - title: undefined, - userCodeLabel: undefined, + action__continue: 'Tiếp tục', + subtitle: 'Nhập mã hiển thị trên thiết bị hoặc ứng dụng bạn muốn ủy quyền.', + title: 'Xác minh thiết bị', + userCodeLabel: 'Mã thiết bị', }, status: { - alreadyApprovedSubtitle: undefined, - alreadyApprovedTitle: undefined, - alreadyDecidedSubtitle: undefined, - alreadyDecidedTitle: undefined, - alreadyDeniedSubtitle: undefined, - alreadyDeniedTitle: undefined, - approvedSubtitle: undefined, - approvedTitle: undefined, - consumedSubtitle: undefined, - consumedTitle: undefined, - deniedSubtitle: undefined, - deniedTitle: undefined, + alreadyApprovedSubtitle: 'Quay lại thiết bị của bạn để tiếp tục.', + alreadyApprovedTitle: 'Bạn đã phê duyệt yêu cầu này', + alreadyDecidedSubtitle: 'Yêu cầu đã được quyết định ở nơi khác. Quay lại thiết bị của bạn.', + alreadyDecidedTitle: 'Yêu cầu này đã được hoàn tất', + alreadyDeniedSubtitle: 'Bắt đầu lại trên thiết bị của bạn nếu bạn muốn thử lại.', + alreadyDeniedTitle: 'Yêu cầu này đã bị từ chối', + approvedSubtitle: 'Bạn đã phê duyệt yêu cầu này. Quay lại thiết bị của bạn để tiếp tục.', + approvedTitle: 'Thiết bị đã được phê duyệt', + consumedSubtitle: 'Thiết bị của bạn đã được ủy quyền. Bạn có thể đóng cửa sổ này.', + consumedTitle: 'Mã này đã được sử dụng', + deniedSubtitle: 'Bạn đã từ chối yêu cầu này. Quay lại thiết bị của bạn.', + deniedTitle: 'Quyền truy cập bị từ chối', }, }, organizationList: { @@ -1182,18 +1230,18 @@ export const viVN: LocalizationResource = { }, badge__automaticInvitation: 'Tự động mời', badge__automaticSuggestion: 'Tự động gợi ý', - badge__enterpriseSso: undefined, + badge__enterpriseSso: 'SSO doanh nghiệp', badge__manualInvitation: 'Không tự động đăng ký', badge__unverified: 'Chưa xác minh', billingPage: { accountCreditsSection: { - title: undefined, - viewHistory: undefined, + title: 'Tín dụng tài khoản', + viewHistory: 'Xem lịch sử tín dụng', }, creditHistoryPage: { - tableHeader__amount: undefined, - tableHeader__date: undefined, - title: undefined, + tableHeader__amount: 'Số tiền', + tableHeader__date: 'Ngày', + title: 'Lịch sử tín dụng tài khoản', }, paymentHistorySection: { empty: 'Không có lịch sử thanh toán', @@ -1229,7 +1277,7 @@ export const viVN: LocalizationResource = { statementsSection: { empty: 'Không có hóa đơn để hiển thị', itemCaption__paidForPlan: 'Thanh toán cho gói {{plan}} {{period}}', - itemCaption__payerCredit: undefined, + itemCaption__payerCredit: 'Tín dụng từ số dư tài khoản', itemCaption__proratedCredit: 'Tín dụng phân chia cho sử dụng một phần của đăng ký trước', itemCaption__subscribedAndPaidForPlan: 'Đăng ký và thanh toán cho gói {{plan}} {{period}}', notFound: 'Không tìm thấy hóa đơn', @@ -1242,11 +1290,11 @@ export const viVN: LocalizationResource = { actionLabel__manageSubscription: 'Quản lý', actionLabel__newSubscription: 'Đăng ký gói', actionLabel__switchPlan: 'Chuyển gói', - includedSeatsUsage: undefined, - overview: undefined, - paidSeatsUsage: undefined, - seatLimit: undefined, - seatLimitAndIncludedSeats: undefined, + includedSeatsUsage: '{{includedSeats}} người dùng đã bao gồm', + overview: 'Tổng quan', + paidSeatsUsage: '{{seatsQuantity}} người dùng x {{amount}}', + seatLimit: 'Tối đa {{seatLimit}} người dùng', + seatLimitAndIncludedSeats: 'Tối đa {{seatLimit}} người dùng ({{includedSeats}} đã bao gồm)', tableHeader__edit: 'Sửa', tableHeader__plan: 'Gói', tableHeader__startDate: 'Ngày bắt đầu', @@ -1269,7 +1317,7 @@ export const viVN: LocalizationResource = { detailsTitle__inviteFailed: 'Mời không thể được gửi. Đã có mời đang chờ cho các địa chỉ email sau: {{email_addresses}}.', formButtonPrimary__continue: 'Gửi mời', - formButtonPrimary__purchaseSeats: undefined, + formButtonPrimary__purchaseSeats: 'Mua thêm người dùng', selectDropdown__role: 'Chọn vai trò', subtitle: 'Nhập hoặc dán một hoặc nhiều địa chỉ email, cách nhau bằng dấu cách hoặc dấu phẩy.', successMessage: 'Mời đã được gửi thành công', @@ -1329,13 +1377,14 @@ export const viVN: LocalizationResource = { description: 'Quản lý tổ chức của bạn.', general: 'Tổng quan', members: 'Thành viên', - security: undefined, + security: 'Bảo mật', title: 'Tổ chức', }, plansPage: { alerts: { noPermissionsToManageBilling: 'Bạn không có quyền quản lý thanh toán cho tổ chức này.', - planMembershipLimitExceeded: undefined, + planMembershipLimitExceeded: + 'Tổ chức của bạn có {{count}} thành viên (bao gồm lời mời đang chờ). Gói này chỉ cho phép {{limit}} thành viên.', }, title: 'Gói', }, @@ -1379,166 +1428,171 @@ export const viVN: LocalizationResource = { securityPage: { connectionPage: { actions: { - activate: undefined, - continueSetup: undefined, + activate: 'Kích hoạt', + continueSetup: 'Tiếp tục thiết lập', }, dangerZone: { - deactivateButton: undefined, - removeButton: undefined, - title: undefined, + deactivateButton: 'Hủy kích hoạt kết nối', + removeButton: 'Xóa kết nối', + title: 'Vùng nguy hiểm', }, domains: { - title: undefined, + title: 'Tên miền', }, identityProvider: { - certificateExpires: undefined, - certificates: undefined, - certificatesCount: undefined, - certificatesSummary: undefined, - certificatesSummaryExpired: undefined, + certificateExpires: 'Chứng chỉ hết hạn', + certificates: 'Chứng chỉ', + certificatesCount: '{{count}} chứng chỉ', + certificatesSummary: '{{count}} chứng chỉ, hết hạn sớm nhất vào {{date}}', + certificatesSummaryExpired: '{{count}} chứng chỉ, một chứng chỉ đã hết hạn vào {{date}}', clientSecret: { - placeholder: undefined, + placeholder: 'Để trống để giữ bí mật hiện tại', }, - editButton: undefined, + editButton: 'Chỉnh sửa', form: { - title: undefined, + title: 'Chỉnh sửa nhà cung cấp danh tính', }, - title: undefined, + title: 'Nhà cung cấp danh tính', }, name: { - editButton: undefined, + editButton: 'Chỉnh sửa', form: { - title: undefined, + title: 'Đổi tên kết nối', }, - title: undefined, + title: 'Tên', }, serviceProvider: { - acsUrl: undefined, - entityId: undefined, - metadataUrl: undefined, - redirectUri: undefined, - title: undefined, + acsUrl: 'Assertion consumer service (ACS) URL', + entityId: 'Entity ID', + metadataUrl: 'Metadata URL', + redirectUri: 'Redirect URI', + title: 'Nhà cung cấp dịch vụ', }, settings: { allowAdditionalIdentifiers: { - description: undefined, - label: undefined, + description: 'Thành viên có thể giữ các phương thức đăng nhập khác.', + label: 'Cho phép định danh bổ sung', }, allowIdpInitiated: { - description: undefined, - label: undefined, + description: 'Đăng nhập có thể bắt đầu từ nhà cung cấp danh tính.', + label: 'Cho phép luồng khởi tạo từ IdP', }, allowSubdomains: { - description: undefined, - label: undefined, + description: 'Đồng thời khớp các tên miền phụ của các tên miền trong kết nối.', + label: 'Cho phép tên miền phụ', }, forceAuthn: { - description: undefined, - label: undefined, + description: 'Yêu cầu xác thực lại tại nhà cung cấp danh tính mỗi lần đăng nhập.', + label: 'Bắt buộc xác thực lại', }, syncUserAttributes: { - description: undefined, - label: undefined, + description: 'Làm mới tên và email từ nhà cung cấp danh tính mỗi lần đăng nhập.', + label: 'Đồng bộ thuộc tính người dùng', }, - title: undefined, + title: 'Cài đặt', }, }, directorySyncSection: { - badge__active: undefined, - badge__inactive: undefined, - badge__ssoRequired: undefined, - description: undefined, - error__load: undefined, - menuAction__activate: undefined, - menuAction__deactivate: undefined, - menuAction__edit: undefined, - menuAction__remove: undefined, - primaryButton__configure: undefined, + badge__active: 'Đang hoạt động', + badge__inactive: 'Không hoạt động', + badge__ssoRequired: 'Yêu cầu SSO', + description: 'Giữ đồng bộ thành viên tổ chức với nhà cung cấp danh tính của bạn. Yêu cầu kết nối SSO.', + error__load: 'Không thể tải Đồng bộ thư mục', + menuAction__activate: 'Kích hoạt', + menuAction__deactivate: 'Hủy kích hoạt', + menuAction__edit: 'Chỉnh sửa', + menuAction__remove: 'Xóa', + primaryButton__configure: 'Cấu hình', removeDialog: { - confirmButton: undefined, - subtitle: undefined, - title: undefined, + confirmButton: 'Xóa Đồng bộ thư mục', + subtitle: + 'Bạn có chắc chắn muốn xóa Đồng bộ thư mục không? Hành động này không thể hoàn tác: thư mục và bearer token của nó sẽ bị xóa và nhà cung cấp danh tính của bạn sẽ không còn khả năng cấp phát thành viên. Các thành viên hiện tại vẫn giữ tư cách thành viên.', + title: 'Xóa Đồng bộ thư mục', }, - title: undefined, + title: 'Đồng bộ thư mục', }, removeDialog: { - confirmButton: undefined, - subtitle: undefined, - title: undefined, + confirmButton: 'Xóa kết nối', + subtitle: + 'Bạn có chắc chắn muốn xóa kết nối "{{name}}"? Hành động này không thể hoàn tác và sẽ xóa kết nối cùng toàn bộ cấu hình của nó.', + title: 'Xóa kết nối SSO', }, ssoBypassPage: { - action__add: undefined, - action__search: undefined, + action__add: 'Thêm', + action__search: 'Tìm kiếm người dùng', addForm: { - emailPlaceholder: undefined, - error__allAlreadyAdded: undefined, - error__alreadyAdded: undefined, - error__memberNotFound: undefined, - modeLabel: undefined, - mode__email: undefined, - mode__role: undefined, - roleOption: undefined, - roleWarning: undefined, - submitButton: undefined, - subtitle: undefined, - title: undefined, + emailPlaceholder: 'Nhập địa chỉ email của thành viên', + error__allAlreadyAdded: 'Mọi người có vai trò đó đã có trong danh sách cho phép.', + error__alreadyAdded: 'Thành viên này đã có trong danh sách cho phép.', + error__memberNotFound: 'Không có thành viên nào của tổ chức này có địa chỉ email đó.', + modeLabel: 'Thêm theo', + mode__email: 'Email', + mode__role: 'Vai trò', + roleOption: '{{role}} ({{count}})', + roleWarning: 'Danh sách này không đồng bộ, thành viên được quản lý thủ công.', + submitButton: 'Thêm thành viên', + subtitle: 'Các thành viên trong danh sách này có thể đăng nhập bằng mã email khi SSO không khả dụng.', + title: 'Thêm thành viên', }, bulkResult: { - added: undefined, - addedMember: undefined, - added__one: undefined, - domainNotServed: undefined, - domainNotServed__one: undefined, - notMember: undefined, - notMember__one: undefined, - unknown: undefined, - unknown__one: undefined, + added: 'Đã thêm {{count}} thành viên', + addedMember: 'Đã thêm thành viên thành công', + added__one: 'Đã thêm 1 thành viên', + domainNotServed: + '{{count}} thành viên không thể thêm vì địa chỉ email của họ không thuộc phạm vi của kết nối.', + domainNotServed__one: '1 thành viên không thể thêm vì địa chỉ email không thuộc phạm vi của kết nối.', + notMember: '{{count}} thành viên không thể thêm vì họ không còn trong tổ chức.', + notMember__one: '1 thành viên không thể thêm vì họ không còn trong tổ chức.', + unknown: '{{count}} thành viên không thể thêm.', + unknown__one: '1 thành viên không thể thêm.', }, table: { - emptyState: undefined, - emptyState__search: undefined, - header__actions: undefined, - header__user: undefined, - menuAction__remove: undefined, + emptyState: 'Không có thành viên nào trong danh sách cho phép', + emptyState__search: 'Không có thành viên nào khớp với tìm kiếm của bạn', + header__actions: 'Hành động', + header__user: 'Người dùng', + menuAction__remove: 'Xóa', }, - title: undefined, + title: 'Bỏ qua SSO', }, ssoBypassSection: { - allowlistCount: undefined, - allowlistCount__one: undefined, - allowlistLabel: undefined, - description: undefined, - error__load: undefined, - menuAction__manage: undefined, - title: undefined, + allowlistCount: '{{count}} thành viên', + allowlistCount__one: '1 thành viên', + allowlistLabel: 'Danh sách cho phép:', + description: 'Các thành viên trong danh sách này có thể đăng nhập bằng mã email khi SSO không khả dụng.', + error__load: 'Không thể tải danh sách cho phép SSO', + menuAction__manage: 'Quản lý', + title: 'Bỏ qua SSO', }, ssoSection: { - badge__active: undefined, - badge__inProgress: undefined, - badge__inactive: undefined, - badge__unconfigured: undefined, - descriptionLine1: undefined, - domainLabel: undefined, - menuAction__activate: undefined, - menuAction__continue: undefined, - menuAction__deactivate: undefined, - menuAction__edit: undefined, - menuAction__remove: undefined, - primaryButton__addConnection: undefined, - primaryButton__configure: undefined, - primaryButton__continueConfiguration: undefined, - primaryButton__startConfiguration: undefined, - title: undefined, - tooltip: undefined, - tooltipLabel: undefined, - tooltip__noRole: undefined, - }, - title: undefined, + badge__active: 'Đang hoạt động', + badge__inProgress: 'Đang tiến hành', + badge__inactive: 'Không hoạt động', + badge__unconfigured: 'Chưa cấu hình', + descriptionLine1: 'Yêu cầu thành viên có tên miền email khớp đăng nhập qua nhà cung cấp danh tính của bạn.', + domainLabel: 'Tên miền:', + menuAction__activate: 'Kích hoạt', + menuAction__continue: 'Tiếp tục cấu hình', + menuAction__deactivate: 'Hủy kích hoạt', + menuAction__edit: 'Chỉnh sửa', + menuAction__remove: 'Xóa', + primaryButton__addConnection: 'Thêm kết nối', + primaryButton__configure: 'Cấu hình', + primaryButton__continueConfiguration: 'Tiếp tục cấu hình', + primaryButton__startConfiguration: 'Bắt đầu cấu hình', + title: 'SSO', + tooltip: + 'Thành viên không có tên miền khớp vẫn có thể đăng nhập bằng các phương thức xác thực hiện có. Thành viên mới sẽ được gán vào {{role}} trong tổ chức này.', + tooltipLabel: 'Thêm thông tin', + tooltip__noRole: + 'Thành viên không có tên miền khớp vẫn có thể đăng nhập bằng các phương thức xác thực hiện có.', + }, + title: 'Bảo mật', }, start: { headerTitle__general: 'Tổng quan', headerTitle__members: 'Thành viên', - membershipSeatUsageLabel: undefined, + membershipSeatUsageLabel: 'Đã dùng {{count}} trên {{limit}} người dùng', profileSection: { primaryButton: 'Cập nhật hồ sơ', title: 'Hồ sơ tổ chức', @@ -1661,7 +1715,7 @@ export const viVN: LocalizationResource = { }, }, searchInput: { - action__clear: undefined, + action__clear: 'Xóa tìm kiếm', }, signIn: { accountSwitcher: { @@ -1746,8 +1800,8 @@ export const viVN: LocalizationResource = { titleNewTab: 'Đăng nhập trên tab khác', }, verifiedTransferable: { - subtitle: undefined, - title: undefined, + subtitle: 'Quay lại tab gốc để tiếp tục', + title: 'Email đã được xác minh', }, }, emailLinkMfa: { @@ -1761,7 +1815,7 @@ export const viVN: LocalizationResource = { title: 'Chọn tài khoản doanh nghiệp của bạn', }, enterpriseSSO: { - formButtonPrimary: undefined, + formButtonPrimary: 'Tiếp tục với SSO', }, forgotPassword: { formTitle: 'Mã xác minh mật khẩu', @@ -1815,10 +1869,10 @@ export const viVN: LocalizationResource = { title: 'Kiểm tra điện thoại', }, protectCheck: { - loading: undefined, - retryButton: undefined, - subtitle: undefined, - title: undefined, + loading: 'Đang tải…', + retryButton: 'Thử lại', + subtitle: 'Vui lòng chờ trong khi chúng tôi xác minh yêu cầu của bạn.', + title: 'Đang xác minh yêu cầu của bạn', }, resetPassword: { formButtonPrimary: 'Đặt lại mật khẩu', @@ -1830,13 +1884,13 @@ export const viVN: LocalizationResource = { detailsLabel: 'Chúng tôi cần xác minh danh tính của bạn trước khi đặt lại mật khẩu.', }, ssoBypass: { - actionLink: undefined, + actionLink: 'Không thể dùng SSO?', code: { - resendButton: undefined, - subtitle: undefined, - title: undefined, + resendButton: 'Không nhận được mã? Gửi lại', + subtitle: 'để tiếp tục đến {{applicationName}}', + title: 'Kiểm tra email', }, - notice: undefined, + notice: 'Tổ chức của bạn yêu cầu đăng nhập một lần. Việc tiếp tục mà không sử dụng sẽ được ghi lại.', }, start: { actionLink: 'Đăng ký', @@ -1935,10 +1989,10 @@ export const viVN: LocalizationResource = { title: 'Xác minh điện thoại', }, protectCheck: { - loading: undefined, - retryButton: undefined, - subtitle: undefined, - title: undefined, + loading: 'Đang tải…', + retryButton: 'Thử lại', + subtitle: 'Vui lòng chờ trong khi chúng tôi xác minh yêu cầu của bạn.', + title: 'Đang xác minh yêu cầu của bạn', }, restrictedAccess: { actionLink: 'Đăng nhập', @@ -2087,10 +2141,12 @@ export const viVN: LocalizationResource = { }, }, unstable__errors: { - action_blocked: undefined, + action_blocked: + 'Không thể hoàn tất hành động này. Vui lòng thử lại sau hoặc liên hệ hỗ trợ nếu sự cố vẫn tiếp diễn.', already_a_member_in_organization: '{{email}} đã là thành viên của tổ chức.', - api_key_name_already_exists: undefined, - api_key_usage_exceeded: undefined, + api_key_name_already_exists: 'Tên khóa API đã tồn tại.', + api_key_usage_exceeded: + 'Bạn đã đạt đến giới hạn sử dụng. Bạn có thể gỡ bỏ giới hạn bằng cách nâng cấp lên gói trả phí.', avatar_file_size_exceeded: 'Kích thước tệp vượt quá giới hạn tối đa 10MB. Vui lòng chọn tệp nhỏ hơn.', avatar_file_type_invalid: 'Loại tệp không được hỗ trợ. Vui lòng tải lên hình ảnh JPG, PNG, GIF hoặc WEBP.', captcha_invalid: undefined, @@ -2118,7 +2174,8 @@ export const viVN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Mật khẩu của bạn quá ngắn. Nó phải có ít nhất 8 ký tự.', - form_password_matches_identifier: undefined, + form_password_matches_identifier: + 'Mật khẩu không được trùng với địa chỉ email, số điện thoại hoặc tên người dùng của bạn. Để đảm bảo an toàn tài khoản, vui lòng sử dụng mật khẩu khác.', form_password_not_strong_enough: 'Mật khẩu của bạn không đủ mạnh.', form_password_or_identifier_incorrect: 'Mật khẩu hoặc địa chỉ email không đúng. Vui lòng thử lại hoặc sử dụng phương thức khác.', @@ -2134,10 +2191,12 @@ export const viVN: LocalizationResource = { 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ự.', form_username_needs_non_number_char: 'Tên người dùng của bạn phải chứa ít nhất một ký tự không phải là số.', identification_deletion_failed: undefined, - insufficient_seats_change_plan: undefined, - insufficient_seats_contact_support: undefined, + insufficient_seats_change_plan: + 'Tổ chức của bạn không có đủ số người dùng để mời số lượng thành viên mong muốn. Vui lòng chuyển sang gói hỗ trợ số lượng thành viên bạn đang cố gắng mời.', + insufficient_seats_contact_support: + 'Tổ chức của bạn không có đủ số người dùng để mời số lượng thành viên mong muốn. Vui lòng liên hệ hỗ trợ.', not_allowed_access: undefined, - oauth_access_denied: undefined, + oauth_access_denied: 'Bạn đã không cấp quyền truy cập vào tài khoản của mình.', organization_domain_blocked: undefined, organization_domain_common: undefined, organization_domain_exists_for_enterprise_connection: undefined, @@ -2165,18 +2224,24 @@ export const viVN: LocalizationResource = { phone_number_exists: undefined, protect_check_aborted: undefined, protect_check_already_resolved: undefined, - protect_check_execution_failed: undefined, - protect_check_invalid_script: undefined, - protect_check_invalid_sdk_url: undefined, - protect_check_required: undefined, - protect_check_script_load_failed: undefined, - protect_check_timed_out: undefined, - protect_check_unsupported_environment: undefined, + protect_check_execution_failed: 'Quá trình xác minh chưa hoàn tất. Vui lòng thử lại.', + protect_check_invalid_script: 'Không thể tải quá trình xác minh. Vui lòng liên hệ hỗ trợ nếu sự cố vẫn tiếp diễn.', + protect_check_invalid_sdk_url: 'Quá trình xác minh không thể bắt đầu. Vui lòng liên hệ hỗ trợ.', + protect_check_required: + 'Lần đăng nhập này cần thêm một bước xác minh không thể hiển thị tại đây. Vui lòng thử lại hoặc sử dụng phương thức đăng nhập khác.', + protect_check_script_load_failed: + 'Không thể tải quá trình xác minh. Điều này có thể do sự cố mạng hoặc Chính sách bảo mật nội dung chặn tập lệnh xác minh. Vui lòng thử lại hoặc liên hệ hỗ trợ.', + protect_check_timed_out: 'Quá trình xác minh không hoàn tất kịp thời. Vui lòng thử lại.', + protect_check_unsupported_environment: + 'Quá trình xác minh không được hỗ trợ trong môi trường này. Vui lòng tiếp tục trong trình duyệt tiêu chuẩn hoặc liên hệ hỗ trợ.', session_exists: undefined, - sso_bypass_domain_not_served: undefined, - ticket_expired_code: undefined, - ticket_invalid_code: undefined, - too_many_unverified_identifications: undefined, + sso_bypass_domain_not_served: + 'Không thể thêm thành viên này vì địa chỉ email của họ không thuộc phạm vi của kết nối nào.', + ticket_expired_code: 'Liên kết này đã hết hạn. Vui lòng bắt đầu lại hoặc yêu cầu liên kết mới.', + ticket_invalid_code: + 'Liên kết này không còn hợp lệ hoặc đã được sử dụng. Vui lòng bắt đầu lại hoặc yêu cầu liên kết mới.', + too_many_unverified_identifications: + 'Có quá nhiều xác minh đang chờ xử lý trên tài khoản này. Hãy xóa địa chỉ email, số điện thoại hoặc ví chưa xác minh mà bạn không còn cần, hoặc chờ vài phút để quá trình thiết lập passkey chưa hoàn tất hết hạn, sau đó thử lại.', web3_missing_identifier: 'Không tìm thấy phần mở rộng Web3 Wallet. Vui lòng cài đặt một phần mở rộng để tiếp tục.', web3_signature_request_rejected: 'Bạn đã từ chối yêu cầu ký. Vui lòng thử lại để tiếp tục.', web3_solana_signature_generation_failed: 'Đã xảy ra lỗi khi tạo chữ ký. Vui lòng thử lại để tiếp tục.', @@ -2253,13 +2318,13 @@ export const viVN: LocalizationResource = { }, billingPage: { accountCreditsSection: { - title: undefined, - viewHistory: undefined, + title: 'Tín dụng tài khoản', + viewHistory: 'Xem lịch sử tín dụng', }, creditHistoryPage: { - tableHeader__amount: undefined, - tableHeader__date: undefined, - title: undefined, + tableHeader__amount: 'Số tiền', + tableHeader__date: 'Ngày', + title: 'Lịch sử tín dụng tài khoản', }, paymentHistorySection: { empty: 'Không có lịch sử thanh toán', @@ -2295,7 +2360,7 @@ export const viVN: LocalizationResource = { statementsSection: { empty: 'Không có báo cáo để hiển thị', itemCaption__paidForPlan: 'Thanh toán cho {{plan}} {{period}} gói', - itemCaption__payerCredit: undefined, + itemCaption__payerCredit: 'Tín dụng từ số dư tài khoản', itemCaption__proratedCredit: 'Tín dụng phân chia cho sử dụng một phần của đăng ký trước', itemCaption__subscribedAndPaidForPlan: 'Đăng ký và thanh toán cho {{plan}} {{period}} gói', notFound: 'Không tìm thấy báo cáo', @@ -2308,7 +2373,7 @@ export const viVN: LocalizationResource = { actionLabel__manageSubscription: 'Quản lý', actionLabel__newSubscription: 'Đăng ký gói', actionLabel__switchPlan: 'Chuyển gói', - overview: undefined, + overview: 'Tổng quan', tableHeader__edit: 'Sửa', tableHeader__plan: 'Gói', tableHeader__startDate: 'Ngày bắt đầu',