From 7ad287c4db21710532fd8cf3c992b2b7f1d70179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=A2n=20M=E1=BB=99t=20N=E1=BA=AFng?= Date: Sat, 30 May 2026 06:32:30 +0700 Subject: [PATCH] feat(i18n): add Vietnamese (vi) locale (#2043) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(i18n): add Vietnamese (vi) locale - Add "vi" to SUPPORTED_LOCALES in LanguagesHelper - Create 110 vi.yml translation files across all locale directories: breadcrumbs, models (27 files), views (75+ files), mailers, doorkeeper - All files validated as valid YAML with no interpolation mismatches - Fallback to English for any untranslated keys via existing fallbacks config * fix(i18n): apply CodeRabbit review fixes to Vietnamese locale - breadcrumbs: securities → Chứng khoán (was duplicate of security/Bảo mật) - period label_short: distinguish years from days (5Năm/10Năm/NĐN vs N for days) - imports: localize "Hover" → "Di chuột" in error hint - recurring_transactions: transfer_feature_disabled uses "Chuyển khoản" not "Giao dịch" - reports: YTD period labels "NNN %{year}" → "Từ đầu năm %{year}" - sso_identities: explicit unlink success message instead of generic "Thành công" - simplefin_items: standardize branding SimpleFin → SimpleFIN (4 occurrences) - transactions: rename duplicate YAML key merge_duplicate → merge_duplicate_button --- app/helpers/languages_helper.rb | 3 +- config/locales/breadcrumbs/vi.yml | 87 +++ config/locales/doorkeeper.vi.yml | 149 +++++ .../locales/mailers/invitation_mailer/vi.yml | 5 + .../locales/mailers/pdf_import_mailer/vi.yml | 5 + config/locales/models/account/vi.yml | 34 ++ .../locales/models/account_statement/vi.yml | 30 + config/locales/models/address/vi.yml | 11 + config/locales/models/api_key/vi.yml | 7 + config/locales/models/brex_item/vi.yml | 14 + config/locales/models/category/vi.yml | 29 + config/locales/models/category_import/vi.yml | 8 + config/locales/models/chat/vi.yml | 8 + config/locales/models/coinbase_account/vi.yml | 5 + config/locales/models/coinstats_item/vi.yml | 10 + config/locales/models/entry/vi.yml | 9 + config/locales/models/import/vi.yml | 18 + .../locales/models/indexa_capital_item/vi.yml | 7 + config/locales/models/period/vi.yml | 54 ++ config/locales/models/plaid_account/vi.yml | 7 + .../locales/models/provider_warnings/vi.yml | 4 + .../models/recurring_transaction/vi.yml | 7 + config/locales/models/rule/vi.yml | 9 + config/locales/models/rule_import/vi.yml | 9 + .../locales/models/simplefin_account/vi.yml | 7 + config/locales/models/sophtron_account/vi.yml | 7 + config/locales/models/sso_provider/vi.yml | 12 + .../locales/models/time_series/value/vi.yml | 9 + config/locales/models/transaction/vi.yml | 11 + config/locales/models/transfer/vi.yml | 22 + config/locales/models/trend/vi.yml | 13 + config/locales/models/user/vi.yml | 20 + config/locales/views/account_sharings/vi.yml | 29 + .../locales/views/account_statements/vi.yml | 116 ++++ config/locales/views/accounts/vi.yml | 192 +++++++ config/locales/views/admin/invitations/vi.yml | 8 + .../locales/views/admin/sso_providers/vi.yml | 138 +++++ config/locales/views/admin/users/vi.yml | 53 ++ config/locales/views/application/vi.yml | 10 + config/locales/views/binance_items/vi.yml | 75 +++ config/locales/views/brex_items/vi.yml | 277 ++++++++++ config/locales/views/budgets/vi.yml | 97 ++++ config/locales/views/categories/vi.yml | 52 ++ .../locales/views/category/deletions/vi.yml | 13 + .../locales/views/category/dropdowns/vi.yml | 11 + config/locales/views/chats/vi.yml | 44 ++ config/locales/views/coinbase_items/vi.yml | 78 +++ config/locales/views/coinstats_items/vi.yml | 75 +++ config/locales/views/components/vi.yml | 162 ++++++ config/locales/views/credit_cards/vi.yml | 26 + config/locales/views/cryptos/vi.yml | 20 + config/locales/views/depositories/vi.yml | 26 + .../views/email_confirmation_mailer/vi.yml | 9 + .../locales/views/enable_banking_items/vi.yml | 116 ++++ config/locales/views/entries/vi.yml | 23 + config/locales/views/family_exports/vi.yml | 43 ++ config/locales/views/holdings/vi.yml | 101 ++++ config/locales/views/ibkr_items/vi.yml | 92 ++++ .../views/impersonation_sessions/vi.yml | 25 + config/locales/views/imports/vi.yml | 436 +++++++++++++++ .../locales/views/indexa_capital_items/vi.yml | 239 ++++++++ config/locales/views/investments/vi.yml | 196 +++++++ config/locales/views/invitation_mailer/vi.yml | 8 + config/locales/views/invitations/vi.yml | 28 + config/locales/views/invite_codes/vi.yml | 10 + config/locales/views/kraken_items/vi.yml | 85 +++ config/locales/views/layout/vi.yml | 29 + config/locales/views/loans/vi.yml | 37 ++ config/locales/views/lunchflow_items/vi.yml | 166 ++++++ config/locales/views/merchants/vi.yml | 73 +++ config/locales/views/mercury_items/vi.yml | 208 +++++++ config/locales/views/messages/vi.yml | 6 + config/locales/views/mfa/vi.yml | 41 ++ config/locales/views/oidc_accounts/vi.yml | 42 ++ config/locales/views/onboardings/vi.yml | 66 +++ config/locales/views/other_assets/vi.yml | 9 + config/locales/views/other_liabilities/vi.yml | 7 + config/locales/views/pages/vi.yml | 92 ++++ config/locales/views/password_mailer/vi.yml | 8 + config/locales/views/password_resets/vi.yml | 15 + config/locales/views/passwords/vi.yml | 10 + config/locales/views/pdf_import_mailer/vi.yml | 17 + .../views/pending_duplicate_merges/vi.yml | 21 + config/locales/views/plaid_items/vi.yml | 34 ++ config/locales/views/preview/vi.yml | 4 + config/locales/views/properties/vi.yml | 89 +++ .../views/recurring_transactions/vi.yml | 56 ++ config/locales/views/registrations/vi.yml | 31 ++ config/locales/views/reports/vi.yml | 242 +++++++++ config/locales/views/rules/vi.yml | 115 ++++ config/locales/views/securities/vi.yml | 14 + config/locales/views/sessions/vi.yml | 35 ++ config/locales/views/settings/api_keys/vi.yml | 115 ++++ config/locales/views/settings/hostings/vi.yml | 194 +++++++ .../locales/views/settings/securities/vi.yml | 31 ++ .../views/settings/sso_identities/vi.yml | 7 + config/locales/views/settings/vi.yml | 512 ++++++++++++++++++ config/locales/views/shared/vi.yml | 38 ++ config/locales/views/simplefin_items/vi.yml | 159 ++++++ config/locales/views/snaptrade_items/vi.yml | 191 +++++++ config/locales/views/sophtron_items/vi.yml | 313 +++++++++++ config/locales/views/splits/vi.yml | 47 ++ config/locales/views/subscriptions/vi.yml | 24 + config/locales/views/tag/deletions/vi.yml | 14 + config/locales/views/tags/vi.yml | 26 + config/locales/views/trades/vi.yml | 57 ++ config/locales/views/transactions/vi.yml | 340 ++++++++++++ config/locales/views/transfer_matches/vi.yml | 24 + config/locales/views/transfers/vi.yml | 47 ++ config/locales/views/users/vi.yml | 29 + config/locales/views/valuations/vi.yml | 60 ++ config/locales/views/vehicles/vi.yml | 35 ++ 112 files changed, 7272 insertions(+), 1 deletion(-) create mode 100644 config/locales/breadcrumbs/vi.yml create mode 100644 config/locales/doorkeeper.vi.yml create mode 100644 config/locales/mailers/invitation_mailer/vi.yml create mode 100644 config/locales/mailers/pdf_import_mailer/vi.yml create mode 100644 config/locales/models/account/vi.yml create mode 100644 config/locales/models/account_statement/vi.yml create mode 100644 config/locales/models/address/vi.yml create mode 100644 config/locales/models/api_key/vi.yml create mode 100644 config/locales/models/brex_item/vi.yml create mode 100644 config/locales/models/category/vi.yml create mode 100644 config/locales/models/category_import/vi.yml create mode 100644 config/locales/models/chat/vi.yml create mode 100644 config/locales/models/coinbase_account/vi.yml create mode 100644 config/locales/models/coinstats_item/vi.yml create mode 100644 config/locales/models/entry/vi.yml create mode 100644 config/locales/models/import/vi.yml create mode 100644 config/locales/models/indexa_capital_item/vi.yml create mode 100644 config/locales/models/period/vi.yml create mode 100644 config/locales/models/plaid_account/vi.yml create mode 100644 config/locales/models/provider_warnings/vi.yml create mode 100644 config/locales/models/recurring_transaction/vi.yml create mode 100644 config/locales/models/rule/vi.yml create mode 100644 config/locales/models/rule_import/vi.yml create mode 100644 config/locales/models/simplefin_account/vi.yml create mode 100644 config/locales/models/sophtron_account/vi.yml create mode 100644 config/locales/models/sso_provider/vi.yml create mode 100644 config/locales/models/time_series/value/vi.yml create mode 100644 config/locales/models/transaction/vi.yml create mode 100644 config/locales/models/transfer/vi.yml create mode 100644 config/locales/models/trend/vi.yml create mode 100644 config/locales/models/user/vi.yml create mode 100644 config/locales/views/account_sharings/vi.yml create mode 100644 config/locales/views/account_statements/vi.yml create mode 100644 config/locales/views/accounts/vi.yml create mode 100644 config/locales/views/admin/invitations/vi.yml create mode 100644 config/locales/views/admin/sso_providers/vi.yml create mode 100644 config/locales/views/admin/users/vi.yml create mode 100644 config/locales/views/application/vi.yml create mode 100644 config/locales/views/binance_items/vi.yml create mode 100644 config/locales/views/brex_items/vi.yml create mode 100644 config/locales/views/budgets/vi.yml create mode 100644 config/locales/views/categories/vi.yml create mode 100644 config/locales/views/category/deletions/vi.yml create mode 100644 config/locales/views/category/dropdowns/vi.yml create mode 100644 config/locales/views/chats/vi.yml create mode 100644 config/locales/views/coinbase_items/vi.yml create mode 100644 config/locales/views/coinstats_items/vi.yml create mode 100644 config/locales/views/components/vi.yml create mode 100644 config/locales/views/credit_cards/vi.yml create mode 100644 config/locales/views/cryptos/vi.yml create mode 100644 config/locales/views/depositories/vi.yml create mode 100644 config/locales/views/email_confirmation_mailer/vi.yml create mode 100644 config/locales/views/enable_banking_items/vi.yml create mode 100644 config/locales/views/entries/vi.yml create mode 100644 config/locales/views/family_exports/vi.yml create mode 100644 config/locales/views/holdings/vi.yml create mode 100644 config/locales/views/ibkr_items/vi.yml create mode 100644 config/locales/views/impersonation_sessions/vi.yml create mode 100644 config/locales/views/imports/vi.yml create mode 100644 config/locales/views/indexa_capital_items/vi.yml create mode 100644 config/locales/views/investments/vi.yml create mode 100644 config/locales/views/invitation_mailer/vi.yml create mode 100644 config/locales/views/invitations/vi.yml create mode 100644 config/locales/views/invite_codes/vi.yml create mode 100644 config/locales/views/kraken_items/vi.yml create mode 100644 config/locales/views/layout/vi.yml create mode 100644 config/locales/views/loans/vi.yml create mode 100644 config/locales/views/lunchflow_items/vi.yml create mode 100644 config/locales/views/merchants/vi.yml create mode 100644 config/locales/views/mercury_items/vi.yml create mode 100644 config/locales/views/messages/vi.yml create mode 100644 config/locales/views/mfa/vi.yml create mode 100644 config/locales/views/oidc_accounts/vi.yml create mode 100644 config/locales/views/onboardings/vi.yml create mode 100644 config/locales/views/other_assets/vi.yml create mode 100644 config/locales/views/other_liabilities/vi.yml create mode 100644 config/locales/views/pages/vi.yml create mode 100644 config/locales/views/password_mailer/vi.yml create mode 100644 config/locales/views/password_resets/vi.yml create mode 100644 config/locales/views/passwords/vi.yml create mode 100644 config/locales/views/pdf_import_mailer/vi.yml create mode 100644 config/locales/views/pending_duplicate_merges/vi.yml create mode 100644 config/locales/views/plaid_items/vi.yml create mode 100644 config/locales/views/preview/vi.yml create mode 100644 config/locales/views/properties/vi.yml create mode 100644 config/locales/views/recurring_transactions/vi.yml create mode 100644 config/locales/views/registrations/vi.yml create mode 100644 config/locales/views/reports/vi.yml create mode 100644 config/locales/views/rules/vi.yml create mode 100644 config/locales/views/securities/vi.yml create mode 100644 config/locales/views/sessions/vi.yml create mode 100644 config/locales/views/settings/api_keys/vi.yml create mode 100644 config/locales/views/settings/hostings/vi.yml create mode 100644 config/locales/views/settings/securities/vi.yml create mode 100644 config/locales/views/settings/sso_identities/vi.yml create mode 100644 config/locales/views/settings/vi.yml create mode 100644 config/locales/views/shared/vi.yml create mode 100644 config/locales/views/simplefin_items/vi.yml create mode 100644 config/locales/views/snaptrade_items/vi.yml create mode 100644 config/locales/views/sophtron_items/vi.yml create mode 100644 config/locales/views/splits/vi.yml create mode 100644 config/locales/views/subscriptions/vi.yml create mode 100644 config/locales/views/tag/deletions/vi.yml create mode 100644 config/locales/views/tags/vi.yml create mode 100644 config/locales/views/trades/vi.yml create mode 100644 config/locales/views/transactions/vi.yml create mode 100644 config/locales/views/transfer_matches/vi.yml create mode 100644 config/locales/views/transfers/vi.yml create mode 100644 config/locales/views/users/vi.yml create mode 100644 config/locales/views/valuations/vi.yml create mode 100644 config/locales/views/vehicles/vi.yml diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 66677a6c1..3e5c73e3a 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -168,7 +168,8 @@ module LanguagesHelper "zh-CN", # Chinese (Simplified) "zh-TW", # Chinese (Traditional) "nl", # Dutch - "hu" # Hungarian + "hu", # Hungarian + "vi" # Vietnamese ].freeze COUNTRY_MAPPING = { diff --git a/config/locales/breadcrumbs/vi.yml b/config/locales/breadcrumbs/vi.yml new file mode 100644 index 000000000..4da248872 --- /dev/null +++ b/config/locales/breadcrumbs/vi.yml @@ -0,0 +1,87 @@ +--- +vi: + breadcrumbs: + account_sharings: Chia sẻ tài khoản + account_statements: Kho sao kê + accounts: Tài khoản + ai_prompts: Câu lệnh AI + api_key: Khóa API + api_keys: Khóa API + appearance: Giao diện + appearances: Giao diện + bank_sync: Đồng bộ ngân hàng + binance_items: Binance + brex_items: Brex + budget_categories: Danh mục ngân sách + budgets: Ngân sách + categories: Danh mục + categorize: Phân loại + chats: Trò chuyện + coinbase_items: Coinbase + coinstats_items: CoinStats + credit_cards: Thẻ tín dụng + cryptos: Tiền mã hóa + dashboard: Bảng điều khiển + debug: Gỡ lỗi + debugs: Gỡ lỗi + depositories: Tài khoản tiền mặt + enable_banking_items: Enable Banking + exports: Xuất dữ liệu + family_exports: Xuất dữ liệu + family_merchants: Nhà cung cấp + guides: Hướng dẫn + holdings: Danh mục nắm giữ + home: Trang chủ + hostings: Tự lưu trữ + ibkr_items: Interactive Brokers + impersonation_sessions: Mạo danh + imports: Nhập dữ liệu + indexa_capital_items: Indexa Capital + intro: Giới thiệu + investments: Đầu tư + invitations: Lời mời + invite_codes: Mã mời + kraken_items: Kraken + llm_usage: Sử dụng LLM + llm_usages: Sử dụng LLM + loans: Khoản vay + lunchflow_items: Lunch Flow + merchants: Nhà cung cấp + mercury_items: Mercury + messages: Tin nhắn + mfa: Xác thực hai yếu tố + oidc_accounts: Tài khoản SSO + onboardings: Khởi đầu + other_assets: Tài sản khác + other_liabilities: Nợ khác + payments: Thanh toán + pending_duplicate_merges: Xem xét trùng lặp + plaid_items: Plaid + preferences: Tùy chọn + profile: Thông tin hồ sơ + profiles: Thông tin hồ sơ + properties: Bất động sản + providers: Nhà cung cấp dịch vụ + recurring_transactions: Định kỳ + registrations: Đăng ký + reports: Báo cáo + rules: Quy tắc + securities: Chứng khoán + security: Bảo mật + self_hosting: Tự lưu trữ + sessions: Đăng nhập + simplefin_items: SimpleFIN + snaptrade_items: SnapTrade + sophtron_items: Sophtron + splits: Phân chia + sso_identities: Kết nối SSO + sso_providers: Nhà cung cấp SSO + subscriptions: Gói đăng ký + tags: Nhãn + trades: Giao dịch chứng khoán + transactions: Giao dịch + transfer_matches: Khớp chuyển khoản + transfers: Chuyển khoản + users: Người dùng + valuations: Định giá + vehicles: Phương tiện diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml new file mode 100644 index 000000000..c1f00ce30 --- /dev/null +++ b/config/locales/doorkeeper.vi.yml @@ -0,0 +1,149 @@ +vi: + activerecord: + attributes: + doorkeeper/application: + name: 'Tên' + redirect_uri: 'URI chuyển hướng' + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: 'không được chứa fragment.' + invalid_uri: 'phải là URI hợp lệ.' + unspecified_scheme: 'phải chỉ định scheme.' + relative_uri: 'phải là URI tuyệt đối.' + secured_uri: 'phải là URI HTTPS/SSL.' + forbidden_uri: 'bị cấm bởi máy chủ.' + scopes: + not_match_configured: "không khớp với cấu hình trên máy chủ." + + doorkeeper: + applications: + confirmations: + destroy: 'Bạn có chắc không?' + buttons: + edit: 'Chỉnh sửa' + destroy: 'Xóa' + submit: 'Gửi' + cancel: 'Hủy' + authorize: 'Ủy quyền' + form: + error: 'Ối! Kiểm tra biểu mẫu để phát hiện lỗi' + help: + confidential: 'Ứng dụng sẽ được sử dụng khi client secret có thể được giữ bí mật. Ứng dụng di động native và SPA được coi là không bảo mật.' + redirect_uri: 'Dùng một dòng cho mỗi URI' + blank_redirect_uri: "Để trống nếu bạn đã cấu hình nhà cung cấp sử dụng Client Credentials, Resource Owner Password Credentials hoặc loại cấp khác không yêu cầu redirect URI." + scopes: 'Phân tách phạm vi bằng khoảng trắng. Để trống để dùng phạm vi mặc định.' + edit: + title: 'Chỉnh sửa ứng dụng' + index: + title: 'Ứng dụng của bạn' + new: 'Ứng dụng mới' + name: 'Tên' + callback_url: 'URL callback' + confidential: 'Bảo mật?' + actions: 'Hành động' + confidentiality: + 'yes': 'Có' + 'no': 'Không' + new: + title: 'Ứng dụng mới' + show: + title: 'Ứng dụng: %{name}' + application_id: 'UID' + secret: 'Bí mật' + secret_hashed: 'Bí mật đã mã hóa' + scopes: 'Phạm vi' + confidential: 'Bảo mật' + callback_urls: 'URL callback' + actions: 'Hành động' + not_defined: 'Chưa xác định' + + authorizations: + buttons: + authorize: 'Ủy quyền' + deny: 'Từ chối' + error: + title: 'Đã xảy ra lỗi' + go_back: 'Quay lại' + new: + title: 'Yêu cầu ủy quyền' + prompt: 'Ủy quyền cho %{client_name} sử dụng tài khoản của bạn?' + able_to: 'Ứng dụng này sẽ có thể' + show: + title: 'Mã ủy quyền' + authorization_code_label: 'Mã ủy quyền:' + copy_instructions: 'Sao chép mã này và dán vào ứng dụng.' + form_post: + title: 'Gửi biểu mẫu này' + + authorized_applications: + confirmations: + revoke: 'Bạn có chắc không?' + buttons: + revoke: 'Thu hồi' + index: + title: 'Ứng dụng đã được ủy quyền' + application: 'Ứng dụng' + created_at: 'Ngày tạo' + date_format: '%d-%m-%Y %H:%M:%S' + + pre_authorization: + status: 'Tiền ủy quyền' + + errors: + messages: + invalid_request: + unknown: 'Yêu cầu thiếu tham số bắt buộc, bao gồm giá trị tham số không được hỗ trợ, hoặc có định dạng sai.' + missing_param: 'Thiếu tham số bắt buộc: %{value}.' + request_not_authorized: 'Yêu cầu cần được ủy quyền. Tham số bắt buộc để ủy quyền yêu cầu bị thiếu hoặc không hợp lệ.' + invalid_code_challenge: 'Cần có code challenge.' + invalid_redirect_uri: "URI chuyển hướng được yêu cầu không hợp lệ hoặc không khớp với URI chuyển hướng của client." + unauthorized_client: 'Client không được phép thực hiện yêu cầu này bằng phương thức này.' + access_denied: 'Chủ sở hữu tài nguyên hoặc máy chủ ủy quyền đã từ chối yêu cầu.' + invalid_scope: 'Phạm vi được yêu cầu không hợp lệ, không xác định, hoặc có định dạng sai.' + invalid_code_challenge_method: + zero: 'Máy chủ ủy quyền không hỗ trợ PKCE vì không có giá trị code_challenge_method được chấp nhận.' + one: 'code_challenge_method phải là %{challenge_methods}.' + other: 'code_challenge_method phải là một trong %{challenge_methods}.' + server_error: 'Máy chủ ủy quyền gặp điều kiện không mong muốn ngăn không thể thực hiện yêu cầu.' + temporarily_unavailable: 'Máy chủ ủy quyền hiện không thể xử lý yêu cầu do quá tải tạm thời hoặc bảo trì.' + credential_flow_not_configured: 'Luồng Resource Owner Password Credentials thất bại do Doorkeeper.configure.resource_owner_from_credentials chưa được cấu hình.' + resource_owner_authenticator_not_configured: 'Tìm Resource Owner thất bại do Doorkeeper.configure.resource_owner_authenticator chưa được cấu hình.' + admin_authenticator_not_configured: 'Truy cập bảng quản trị bị cấm do Doorkeeper.configure.admin_authenticator chưa được cấu hình.' + unsupported_response_type: 'Máy chủ ủy quyền không hỗ trợ loại phản hồi này.' + unsupported_response_mode: 'Máy chủ ủy quyền không hỗ trợ chế độ phản hồi này.' + invalid_client: 'Xác thực client thất bại do client không xác định, không có xác thực client, hoặc phương thức xác thực không được hỗ trợ.' + invalid_grant: 'Authorization grant được cung cấp không hợp lệ, đã hết hạn, bị thu hồi, không khớp với URI chuyển hướng được dùng trong yêu cầu ủy quyền, hoặc được cấp cho client khác.' + unsupported_grant_type: 'Loại authorization grant không được máy chủ ủy quyền hỗ trợ.' + invalid_token: + revoked: "Access token đã bị thu hồi" + expired: "Access token đã hết hạn" + unknown: "Access token không hợp lệ" + revoke: + unauthorized: "Bạn không được phép thu hồi token này" + forbidden_token: + missing_scope: 'Truy cập tài nguyên này yêu cầu phạm vi "%{oauth_scopes}".' + + flash: + applications: + create: + notice: 'Đã tạo ứng dụng.' + destroy: + notice: 'Đã xóa ứng dụng.' + update: + notice: 'Đã cập nhật ứng dụng.' + authorized_applications: + destroy: + notice: 'Đã thu hồi ứng dụng.' + + layouts: + admin: + title: 'Doorkeeper' + nav: + oauth2_provider: 'Nhà cung cấp OAuth2' + applications: 'Ứng dụng' + home: 'Trang chủ' + application: + title: 'Yêu cầu ủy quyền OAuth' diff --git a/config/locales/mailers/invitation_mailer/vi.yml b/config/locales/mailers/invitation_mailer/vi.yml new file mode 100644 index 000000000..dd3ab75fa --- /dev/null +++ b/config/locales/mailers/invitation_mailer/vi.yml @@ -0,0 +1,5 @@ +--- +vi: + invitation_mailer: + invite_email: + subject: "%{inviter} đã mời bạn tham gia hộ gia đình của họ trên %{product_name}!" diff --git a/config/locales/mailers/pdf_import_mailer/vi.yml b/config/locales/mailers/pdf_import_mailer/vi.yml new file mode 100644 index 000000000..ac844818a --- /dev/null +++ b/config/locales/mailers/pdf_import_mailer/vi.yml @@ -0,0 +1,5 @@ +--- +vi: + pdf_import_mailer: + next_steps: + subject: "Tài liệu PDF của bạn đã được phân tích - %{product_name}" diff --git a/config/locales/models/account/vi.yml b/config/locales/models/account/vi.yml new file mode 100644 index 000000000..6aa8c1b93 --- /dev/null +++ b/config/locales/models/account/vi.yml @@ -0,0 +1,34 @@ +--- +vi: + account_order: + balance_asc: + label: Số dư (Thấp đến Cao) + label_short: Số dư ↑ + balance_desc: + label: Số dư (Cao đến Thấp) + label_short: Số dư ↓ + name_asc: + label: Tên (A-Z) + label_short: Tên ↑ + name_desc: + label: Tên (Z-A) + label_short: Tên ↓ + activerecord: + attributes: + account: + balance: Số dư + currency: Tiền tệ + family: "%{moniker}" + family_id: "%{moniker}" + name: Tên + subtype: Loại phụ + models: + account: Tài khoản + account/credit: Thẻ tín dụng + account/depository: Tài khoản ngân hàng + account/investment: Đầu tư + account/loan: Khoản vay + account/other_asset: Tài sản khác + account/other_liability: Nợ khác + account/property: Bất động sản + account/vehicle: Phương tiện diff --git a/config/locales/models/account_statement/vi.yml b/config/locales/models/account_statement/vi.yml new file mode 100644 index 000000000..b6631b0eb --- /dev/null +++ b/config/locales/models/account_statement/vi.yml @@ -0,0 +1,30 @@ +--- +vi: + activerecord: + attributes: + account_statement: + account: Tài khoản + account_last4_hint: Bốn số cuối tài khoản + account_name_hint: Gợi ý tên tài khoản + closing_balance: Số dư đóng kỳ + content_sha256: Mã kiểm tra nội dung + currency: Tiền tệ + filename: Tên tệp + institution_name_hint: Gợi ý tổ chức + opening_balance: Số dư mở kỳ + original_file: Tệp sao kê + period_end_on: Ngày kết thúc kỳ + period_start_on: Ngày bắt đầu kỳ + errors: + models: + account_statement: + attributes: + checksum: + duplicate_statement_file: đã được tải lên cho hộ gia đình này + content_sha256: + duplicate_statement_file: đã được tải lên cho hộ gia đình này + original_file: + invalid_format: phải là tệp PDF, CSV hoặc XLSX + too_large: quá lớn. Kích thước tối đa là %{max_mb}MB + period_end_on: + on_or_after_start: phải từ ngày bắt đầu kỳ trở đi diff --git a/config/locales/models/address/vi.yml b/config/locales/models/address/vi.yml new file mode 100644 index 000000000..d59892690 --- /dev/null +++ b/config/locales/models/address/vi.yml @@ -0,0 +1,11 @@ +--- +vi: + address: + attributes: + country: Quốc gia + line1: Địa chỉ dòng 1 + line2: Địa chỉ dòng 2 + locality: Địa phương + postal_code: Mã bưu chính + region: Vùng + format: "%{line1} %{line2}, %{locality}, %{region} %{postal_code} %{country}" diff --git a/config/locales/models/api_key/vi.yml b/config/locales/models/api_key/vi.yml new file mode 100644 index 000000000..f1d58b309 --- /dev/null +++ b/config/locales/models/api_key/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + api_key: + cannot_destroy_demo_key: "Không thể xóa khóa API theo dõi demo" diff --git a/config/locales/models/brex_item/vi.yml b/config/locales/models/brex_item/vi.yml new file mode 100644 index 000000000..6d5234255 --- /dev/null +++ b/config/locales/models/brex_item/vi.yml @@ -0,0 +1,14 @@ +--- +vi: + activerecord: + attributes: + brex_item: + base_url: URL cơ sở + name: Tên kết nối + token: Token + errors: + models: + brex_item: + attributes: + base_url: + official_hosts_only: phải để trống, https://api.brex.com, hoặc https://api-staging.brex.com diff --git a/config/locales/models/category/vi.yml b/config/locales/models/category/vi.yml new file mode 100644 index 000000000..6d407dde4 --- /dev/null +++ b/config/locales/models/category/vi.yml @@ -0,0 +1,29 @@ +--- +vi: + models: + category: + uncategorized: Chưa phân loại + other_investments: Đầu tư khác + investment_contributions: Đóng góp đầu tư + defaults: + income: Thu nhập + food_and_drink: Ăn uống + groceries: Thực phẩm + shopping: Mua sắm + transportation: Giao thông + travel: Du lịch + entertainment: Giải trí + healthcare: Chăm sóc sức khỏe + personal_care: Chăm sóc cá nhân + home_improvement: Cải thiện nhà ở + mortgage_rent: Thế chấp / Thuê nhà + utilities: Tiện ích + subscriptions: Đăng ký dịch vụ + insurance: Bảo hiểm + sports_and_fitness: Thể thao & Thể hình + gifts_and_donations: Quà tặng & Từ thiện + taxes: Thuế + loan_payments: Thanh toán khoản vay + services: Dịch vụ + fees: Phí + savings_and_investments: Tiết kiệm & Đầu tư diff --git a/config/locales/models/category_import/vi.yml b/config/locales/models/category_import/vi.yml new file mode 100644 index 000000000..5eb55c925 --- /dev/null +++ b/config/locales/models/category_import/vi.yml @@ -0,0 +1,8 @@ +--- +vi: + activerecord: + errors: + models: + category_import: + own_parent: "Danh mục '%{name}' không thể là danh mục cha của chính nó" + missing_columns: "Thiếu các cột bắt buộc: %{columns}" diff --git a/config/locales/models/chat/vi.yml b/config/locales/models/chat/vi.yml new file mode 100644 index 000000000..44c5c063f --- /dev/null +++ b/config/locales/models/chat/vi.yml @@ -0,0 +1,8 @@ +--- +vi: + chat: + errors: + rate_limited: "Nhà cung cấp AI đang bị giới hạn tốc độ. Vui lòng thử lại sau vài phút." + temporarily_unavailable: "Nhà cung cấp AI tạm thời không khả dụng. Vui lòng thử lại sau vài phút." + misconfigured: "Nhà cung cấp AI chưa được cấu hình đúng. Vui lòng liên hệ quản trị viên." + default: "Không thể tạo phản hồi. Vui lòng thử lại." diff --git a/config/locales/models/coinbase_account/vi.yml b/config/locales/models/coinbase_account/vi.yml new file mode 100644 index 000000000..a26ef6aaf --- /dev/null +++ b/config/locales/models/coinbase_account/vi.yml @@ -0,0 +1,5 @@ +--- +vi: + coinbase: + processor: + paid_via: "Thanh toán qua %{method}" diff --git a/config/locales/models/coinstats_item/vi.yml b/config/locales/models/coinstats_item/vi.yml new file mode 100644 index 000000000..df5809cfe --- /dev/null +++ b/config/locales/models/coinstats_item/vi.yml @@ -0,0 +1,10 @@ +--- +vi: + models: + coinstats_item: + syncer: + importing_wallets: Đang nhập tài khoản tiền mã hóa từ CoinStats... + checking_configuration: Đang kiểm tra cấu hình tài khoản CoinStats... + wallets_need_setup: "%{count} tài khoản tiền mã hóa cần thiết lập..." + processing_holdings: Đang xử lý danh mục nắm giữ... + calculating_balances: Đang tính số dư... diff --git a/config/locales/models/entry/vi.yml b/config/locales/models/entry/vi.yml new file mode 100644 index 000000000..8bef250e6 --- /dev/null +++ b/config/locales/models/entry/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + activerecord: + errors: + models: + entry: + attributes: + base: + invalid_sell_quantity: không thể bán %{sell_qty} cổ phiếu %{ticker} vì bạn chỉ đang nắm giữ %{current_qty} cổ phiếu diff --git a/config/locales/models/import/vi.yml b/config/locales/models/import/vi.yml new file mode 100644 index 000000000..eddc4afd7 --- /dev/null +++ b/config/locales/models/import/vi.yml @@ -0,0 +1,18 @@ +--- +vi: + activerecord: + attributes: + import: + col_sep: Dấu phân cách cột + col_seps: + comma: Dấu phẩy (,) + semicolon: Dấu chấm phẩy (;) + currency: Tiền tệ + number_format: Định dạng số + errors: + models: + import: + duplicate_headers: "Tiêu đề CSV chuẩn hóa thành các cột trùng lặp: %{columns}" + attributes: + raw_file_str: + invalid_csv_format: không phải định dạng CSV hợp lệ diff --git a/config/locales/models/indexa_capital_item/vi.yml b/config/locales/models/indexa_capital_item/vi.yml new file mode 100644 index 000000000..fe05fbfed --- /dev/null +++ b/config/locales/models/indexa_capital_item/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + indexa_capital_item: + credentials_required: "Cần có biến môi trường INDEXA_API_TOKEN hoặc thông tin đăng nhập username/document/password" diff --git a/config/locales/models/period/vi.yml b/config/locales/models/period/vi.yml new file mode 100644 index 000000000..740d4f850 --- /dev/null +++ b/config/locales/models/period/vi.yml @@ -0,0 +1,54 @@ +--- +vi: + period: + last_day: + label_short: "1N" + label: "Hôm qua" + comparison_label: "so với hôm qua" + current_week: + label_short: "TNN" + label: "Tuần này" + comparison_label: "so với đầu tuần" + last_7_days: + label_short: "7N" + label: "7 Ngày Qua" + comparison_label: "so với tuần trước" + current_month: + label_short: "TTN" + label: "Tháng này" + comparison_label: "so với đầu tháng" + last_month: + label_short: "TT" + label: "Tháng Trước" + comparison_label: "so với tháng trước" + last_30_days: + label_short: "30N" + label: "30 Ngày Qua" + comparison_label: "so với 30 ngày trước" + last_90_days: + label_short: "90N" + label: "90 Ngày Qua" + comparison_label: "so với quý trước" + current_year: + label_short: "NĐN" + label: "Năm này" + comparison_label: "so với đầu năm" + last_365_days: + label_short: "365N" + label: "365 Ngày Qua" + comparison_label: "so với 1 năm trước" + last_5_years: + label_short: "5Năm" + label: "5 Năm Qua" + comparison_label: "so với 5 năm trước" + last_10_years: + label_short: "10Năm" + label: "10 Năm Qua" + comparison_label: "so với 10 năm trước" + all_time: + label_short: "Tất cả" + label: "Toàn thời gian" + comparison_label: "so với ban đầu" + custom: + label_short: "Tùy chỉnh" + label: "Khoảng thời gian tùy chỉnh" diff --git a/config/locales/models/plaid_account/vi.yml b/config/locales/models/plaid_account/vi.yml new file mode 100644 index 000000000..67cbbfb44 --- /dev/null +++ b/config/locales/models/plaid_account/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + plaid_account: + no_balance: "Tài khoản Plaid phải có số dư hiện tại hoặc số dư khả dụng" diff --git a/config/locales/models/provider_warnings/vi.yml b/config/locales/models/provider_warnings/vi.yml new file mode 100644 index 000000000..a088d1657 --- /dev/null +++ b/config/locales/models/provider_warnings/vi.yml @@ -0,0 +1,4 @@ +--- +vi: + provider_warnings: + limited_investment_data: "Dữ liệu đầu tư từ nhà cung cấp này còn hạn chế. Nhãn hoạt động (Mua, Bán, Cổ tức) không khả dụng, có thể ảnh hưởng đến độ chính xác của ngân sách. Hãy cân nhắc tạo quy tắc để loại trừ hoặc phân loại các giao dịch đầu tư." diff --git a/config/locales/models/recurring_transaction/vi.yml b/config/locales/models/recurring_transaction/vi.yml new file mode 100644 index 000000000..cb5c5652f --- /dev/null +++ b/config/locales/models/recurring_transaction/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + recurring_transaction: + merchant_or_name_required: "Phải có nhà cung cấp hoặc tên" diff --git a/config/locales/models/rule/vi.yml b/config/locales/models/rule/vi.yml new file mode 100644 index 000000000..9509ed811 --- /dev/null +++ b/config/locales/models/rule/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + activerecord: + errors: + models: + rule: + min_actions: "phải có ít nhất một hành động" + duplicate_actions: "Quy tắc không được có các hành động trùng lặp %{types}" + nested_conditions: "Điều kiện phức hợp không thể lồng nhau" diff --git a/config/locales/models/rule_import/vi.yml b/config/locales/models/rule_import/vi.yml new file mode 100644 index 000000000..2dc419d82 --- /dev/null +++ b/config/locales/models/rule_import/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + activerecord: + errors: + models: + rule_import: + unsupported_resource_type: "Loại tài nguyên không được hỗ trợ: %{resource_type}" + invalid_json: "JSON không hợp lệ trong điều kiện hoặc hành động: %{message}" + min_actions: "Quy tắc phải có ít nhất một hành động" diff --git a/config/locales/models/simplefin_account/vi.yml b/config/locales/models/simplefin_account/vi.yml new file mode 100644 index 000000000..31d864bda --- /dev/null +++ b/config/locales/models/simplefin_account/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + simplefin_account: + no_balance: "Tài khoản SimpleFin phải có số dư hiện tại hoặc số dư khả dụng" diff --git a/config/locales/models/sophtron_account/vi.yml b/config/locales/models/sophtron_account/vi.yml new file mode 100644 index 000000000..fbf30265e --- /dev/null +++ b/config/locales/models/sophtron_account/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + activerecord: + errors: + models: + sophtron_account: + no_balance: "Tài khoản Sophtron phải có số dư hiện tại hoặc số dư khả dụng" diff --git a/config/locales/models/sso_provider/vi.yml b/config/locales/models/sso_provider/vi.yml new file mode 100644 index 000000000..04be849cc --- /dev/null +++ b/config/locales/models/sso_provider/vi.yml @@ -0,0 +1,12 @@ +--- +vi: + activerecord: + errors: + models: + sso_provider: + attributes: + settings: + saml_url_required: "Cần có URL Metadata IdP hoặc URL SSO IdP cho nhà cung cấp SAML" + saml_cert_required: "Cần có Chứng chỉ IdP hoặc Certificate Fingerprint khi không dùng metadata URL" + metadata_url_invalid: "URL Metadata IdP phải là URL hợp lệ" + sso_url_invalid: "URL SSO IdP phải là URL hợp lệ" diff --git a/config/locales/models/time_series/value/vi.yml b/config/locales/models/time_series/value/vi.yml new file mode 100644 index 000000000..2fd849ac0 --- /dev/null +++ b/config/locales/models/time_series/value/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + activemodel: + errors: + models: + time_series/value: + attributes: + value: + must_be_a_money_or_numeric: phải là kiểu Money hoặc Numeric diff --git a/config/locales/models/transaction/vi.yml b/config/locales/models/transaction/vi.yml new file mode 100644 index 000000000..02a2b0a0c --- /dev/null +++ b/config/locales/models/transaction/vi.yml @@ -0,0 +1,11 @@ +--- +vi: + activerecord: + errors: + models: + transaction: + attributes: + attachments: + too_many: "không được vượt quá %{max} tệp mỗi giao dịch" + too_large: "tệp %{index} quá lớn (tối đa %{max_mb}MB)" + invalid_format: "tệp %{index} có định dạng không được hỗ trợ (%{file_format})" diff --git a/config/locales/models/transfer/vi.yml b/config/locales/models/transfer/vi.yml new file mode 100644 index 000000000..63ad1e531 --- /dev/null +++ b/config/locales/models/transfer/vi.yml @@ -0,0 +1,22 @@ +--- +vi: + activerecord: + errors: + models: + transfer: + attributes: + base: + inflow_cannot_be_in_multiple_transfers: Giao dịch nhận tiền không thể thuộc nhiều lần chuyển khoản + must_be_from_different_accounts: Chuyển khoản phải giữa hai tài khoản khác nhau + must_be_from_same_family: Chuyển khoản phải trong cùng một hộ gia đình + must_be_within_date_range: Ngày giao dịch chuyển khoản phải trong vòng 4 ngày nhau + must_have_opposite_amounts: Các giao dịch chuyển khoản phải có số tiền đối nghịch nhau + must_have_single_currency: Chuyển khoản phải sử dụng một loại tiền tệ duy nhất + outflow_cannot_be_in_multiple_transfers: Giao dịch gửi tiền không thể thuộc nhiều lần chuyển khoản + different_accounts: "Phải từ hai tài khoản khác nhau" + same_family: "Phải trong cùng một hộ gia đình" + opposite_amounts: "Phải có số tiền đối nghịch nhau" + within_days: "Phải trong vòng %{count} ngày" + transfer: + name: Chuyển khoản đến %{to_account} + payment_name: Thanh toán đến %{to_account} diff --git a/config/locales/models/trend/vi.yml b/config/locales/models/trend/vi.yml new file mode 100644 index 000000000..ae6e16be5 --- /dev/null +++ b/config/locales/models/trend/vi.yml @@ -0,0 +1,13 @@ +--- +vi: + activemodel: + errors: + models: + trend: + attributes: + current: + must_be_of_the_same_type_as_previous: phải cùng kiểu với giá trị trước + must_be_of_type_money_numeric_or_nil: phải là kiểu Money, Numeric, hoặc nil + previous: + must_be_of_the_same_type_as_current: phải cùng kiểu với giá trị hiện tại + must_be_of_type_money_numeric_or_nil: phải là kiểu Money, Numeric, hoặc nil diff --git a/config/locales/models/user/vi.yml b/config/locales/models/user/vi.yml new file mode 100644 index 000000000..a868a4892 --- /dev/null +++ b/config/locales/models/user/vi.yml @@ -0,0 +1,20 @@ +--- +vi: + activerecord: + attributes: + user: + email: Email + family: "%{moniker}" + family_id: "%{moniker}" + first_name: Tên + last_name: Họ + password: Mật khẩu + password_confirmation: Xác nhận mật khẩu + errors: + models: + user: + attributes: + base: + cannot_deactivate_admin_with_other_users: Quản trị viên không thể xóa tài khoản khi còn người dùng khác. Vui lòng xóa tất cả thành viên trước. + profile_image: + invalid_file_size: kích thước tệp phải nhỏ hơn %{max_megabytes}MB diff --git a/config/locales/views/account_sharings/vi.yml b/config/locales/views/account_sharings/vi.yml new file mode 100644 index 000000000..b8257c4d8 --- /dev/null +++ b/config/locales/views/account_sharings/vi.yml @@ -0,0 +1,29 @@ +--- +vi: + account_sharings: + show: + title: Chia sẻ tài khoản + subtitle: Kiểm soát ai có thể xem và tương tác với tài khoản này + member: Thành viên + permission: Quyền + shared: Đã chia sẻ + no_members: Không có thành viên nào khác trong %{moniker} để chia sẻ + permissions: + full_control: Toàn quyền kiểm soát + full_control_description: Có thể xem, chỉnh sửa và quản lý giao dịch + read_write: Có thể chú thích + read_write_description: Có thể phân loại, gắn nhãn và thêm ghi chú + read_only: Chỉ xem + read_only_description: Chỉ có thể xem dữ liệu tài khoản + save: Lưu cài đặt chia sẻ + owner_label: "Chủ sở hữu: %{name}" + shared_with_count: + one: Đã chia sẻ với 1 thành viên + other: "Đã chia sẻ với %{count} thành viên" + include_in_finances: Tính vào ngân sách & báo cáo của tôi + exclude_from_finances: Loại khỏi ngân sách & báo cáo của tôi + finance_toggle_description: Tính tài khoản này vào tài sản ròng, ngân sách và báo cáo của bạn + update: + success: Cài đặt chia sẻ đã được cập nhật + not_owner: Chỉ chủ sở hữu tài khoản mới có thể quản lý chia sẻ + finance_toggle_success: Tùy chọn bao gồm tài chính đã được cập nhật diff --git a/config/locales/views/account_statements/vi.yml b/config/locales/views/account_statements/vi.yml new file mode 100644 index 000000000..709ca0c45 --- /dev/null +++ b/config/locales/views/account_statements/vi.yml @@ -0,0 +1,116 @@ +--- +vi: + account_statements: + account_tab: + coverage_title: Phạm vi sao kê + coverage_description: Các tháng lịch sử được hỗ trợ bởi sao kê đã tải lên và kiểm tra số dư. + coverage_range: "%{start} - %{end}" + empty: Chưa có sao kê nào được liên kết với tài khoản này. + open_inbox: Hộp thư đến + statements_title: Sao kê + year_label: Năm phạm vi + balance: + unknown: Không xác định + coverage: + status: + ambiguous: Không rõ ràng + covered: Đã phủ + duplicate: Trùng lặp + mismatched: Không khớp + missing: Thiếu + not_expected: Không mong đợi + create: + duplicates: + one: 1 sao kê trùng lặp đã bị bỏ qua. + other: "%{count} sao kê trùng lặp đã bị bỏ qua." + invalid_file_type: Tải lên sao kê dạng PDF, CSV hoặc XLSX dưới giới hạn kích thước. + no_files: Chọn ít nhất một tệp sao kê. + success: + one: 1 sao kê đã được tải lên. + other: "%{count} sao kê đã được tải lên." + destroy: + failure: Không thể xóa sao kê. + success: Sao kê đã được xóa. + form: + account_upload: Tải lên sao kê + files_hint: PDF, CSV hoặc XLSX. Tối đa %{max_size}MB mỗi tệp. + files_label: Tệp sao kê + inbox_upload: Tải lên + index: + account_label: Tài khoản + confidence: "Khớp %{confidence}" + empty_linked: Chưa có sao kê nào được liên kết. + empty_unmatched: Hộp thư sao kê đang trống. + leave_unmatched: Để không khớp + linked_title: Sao kê đã liên kết + no_suggestion: Không có gợi ý + storage_used: Dung lượng đã sử dụng + title: Kho lưu trữ sao kê + unmatched_title: Hộp thư chưa khớp + upload_description: Tải lên sao kê vào hộp thư, hoặc chọn tài khoản để liên kết ngay. + upload_title: Tải lên sao kê + link: + no_account: Chọn một tài khoản trước khi liên kết sao kê này. + success: Đã liên kết sao kê với %{account}. + period: + unknown: Kỳ không xác định + reconciliation: + checks: + closing_balance: Số dư cuối kỳ + opening_balance: Số dư đầu kỳ + period_movement: Biến động trong kỳ + unknown_check: Kiểm tra không xác định + matched: Khớp + mismatched: Không khớp + unavailable: Chưa kiểm tra + reject: + success: Gợi ý khớp sao kê đã bị từ chối. + show: + account_label: Tài khoản + account_last4_hint: Bốn số cuối tài khoản + account_name_hint: Gợi ý tên tài khoản + closing_balance: Số dư cuối kỳ + currency: Tiền tệ + delete: Xóa + difference: Chênh lệch + download: Tải xuống + institution_name_hint: Gợi ý tổ chức + ledger_amount: Sổ cái Sure + linked_to: Đã liên kết với %{account}. + linking_title: Liên kết tài khoản + link_suggestion: Gợi ý liên kết + metadata_title: Siêu dữ liệu sao kê + no_suggestion: Chưa có gợi ý tài khoản nào. + opening_balance: Số dư đầu kỳ + period_end_on: Kết thúc kỳ + period_start_on: Bắt đầu kỳ + reconciliation_title: Đối soát + reconciliation_unavailable: Thêm kỳ sao kê và số dư đầu hoặc cuối kỳ, sau đó đảm bảo Sure có lịch sử số dư cho các ngày đó. + reject: Từ chối + save: Lưu sao kê + statement_amount: Sao kê + suggested_account: Tài khoản được gợi ý là %{account} (độ tin cậy %{confidence}). + title: Sao kê + unlink: Hủy liên kết + unmatched_account: Hộp thư chưa khớp + unknown_value: Không xác định + status: + linked: Đã liên kết + rejected: Đã từ chối + unmatched: Chưa khớp + table: + account: Tài khoản + actions: Hành động + download: Tải xuống + file: Tệp + link_suggestion: Gợi ý liên kết + period: Kỳ + reconciliation: Đối soát + reject: Từ chối gợi ý + suggestion: Gợi ý + unlink: Hủy liên kết + view: Xem + unlink: + success: Sao kê đã được chuyển lại hộp thư chưa khớp. + update: + success: Sao kê đã được cập nhật. diff --git a/config/locales/views/accounts/vi.yml b/config/locales/views/accounts/vi.yml new file mode 100644 index 000000000..a8257c502 --- /dev/null +++ b/config/locales/views/accounts/vi.yml @@ -0,0 +1,192 @@ +--- +vi: + account: + entries: + destroy: + success: "Mục nhập đã được xóa thành công." + accounts: + not_authorized: "Bạn không có quyền quản lý tài khoản này" + account: + complete_setup: Hoàn thành thiết lập + edit: Chỉnh sửa + link_lunchflow: Liên kết với Lunch Flow + link_provider: Liên kết với nhà cung cấp + unlink_provider: Hủy liên kết với nhà cung cấp + change_simplefin_account: Thay đổi tài khoản SimpleFIN + troubleshoot: Khắc phục sự cố + enable: Bật tài khoản + disable: Tắt tài khoản + set_default: Đặt làm mặc định + remove_default: Bỏ mặc định + default_label: Mặc định + delete: Xóa tài khoản + sharing: Chia sẻ + chart: + data_not_available: Dữ liệu không khả dụng cho khoảng thời gian đã chọn + create: + success: "Đã tạo tài khoản %{type}" + set_default: + depository_only: "Chỉ tài khoản tiền mặt và thẻ tín dụng mới có thể đặt làm mặc định." + destroy: + success: "Tài khoản %{type} đã được lên lịch xóa" + cannot_delete_linked: "Không thể xóa tài khoản đã liên kết. Vui lòng hủy liên kết trước." + failed: "Xóa tài nguyên thất bại. Vui lòng thử lại sau." + empty: + empty_message: Thêm tài khoản qua kết nối, nhập dữ liệu hoặc nhập thủ công. + new_account: Tài khoản mới + no_accounts: Chưa có tài khoản nào + form: + balance: "Số dư ngày:" + opening_balance_date_label: Ngày số dư mở đầu + name_label: Tên tài khoản + name_placeholder: Ví dụ tên tài khoản + additional_details: Thông tin bổ sung + institution_name_label: Tên tổ chức + institution_name_placeholder: "ví dụ: Ngân hàng Vietcombank" + institution_domain_label: Tên miền tổ chức + institution_domain_placeholder: "ví dụ: vietcombank.com.vn" + notes_label: Ghi chú + notes_placeholder: Lưu thêm thông tin như số tài khoản, mã định tuyến, IBAN, v.v. + index: + accounts: Tài khoản + manual_accounts: + other_accounts: Tài khoản khác + new_account: Tài khoản mới + sync: Đồng bộ tất cả + sync_all: + syncing: "Đang đồng bộ tài khoản..." + new: + import_accounts: Nhập tài khoản + container: + select: Chọn + navigate: Điều hướng + close: Đóng + method_selector: + connected_entry: Liên kết tài khoản + connected_entry_eu: Liên kết tài khoản EU + link_with_provider: "Liên kết với %{provider}" + lunchflow_entry: Liên kết tài khoản Lunch Flow + manual_entry: Nhập số dư tài khoản + title: Bạn muốn thêm bằng cách nào? + title: Bạn muốn thêm gì? + show: + limited_fx_history_warning: "Lịch sử tỷ giá hối đoái chỉ khả dụng từ %{date} trở đi. Các giao dịch trước ngày này sử dụng chuyển đổi tiền tệ xấp xỉ." + tabs: + activity: Hoạt động + holdings: Danh mục nắm giữ + overview: Tổng quan + statements: Sao kê + activity: + amount: Số tiền + balance: Số dư + confirmed: Đã xác nhận + date: Ngày + entries: mục nhập + entry: mục nhập + filter: Lọc + new: Mới + new_activity: Hoạt động mới + new_balance: Số dư mới + new_trade: Giao dịch mới + new_transaction: Giao dịch mới + new_transfer: Chuyển khoản mới + no_entries: Không tìm thấy mục nhập + pending: Đang chờ + search: + placeholder: Tìm kiếm mục nhập theo tên + search_placeholder: Tìm kiếm mục nhập theo tên + status: Trạng thái + title: Hoạt động + chart: + balance: Số dư + owed: Số tiền nợ + header: + complete_setup: Hoàn thành thiết lập + menu: + confirm_accept: Xóa "%{name}" + confirm_body_html: "

Bằng cách xóa tài khoản này, bạn sẽ xóa lịch sử giá trị của nó, ảnh hưởng đến nhiều khía cạnh tài khoản tổng thể. Hành động này sẽ ảnh hưởng trực tiếp đến tính toán tài sản ròng và biểu đồ tài khoản.


Sau khi xóa, bạn không thể khôi phục thông tin tài khoản và cần thêm lại như tài khoản mới.

" + confirm_title: Xóa tài khoản? + delete_account: Xóa tài khoản + edit: Chỉnh sửa + import: Nhập giao dịch + import_trades: Nhập giao dịch chứng khoán + import_transactions: Nhập giao dịch + manage: Quản lý tài khoản + sharing: Chia sẻ + statements: Sao kê + update: + success: "Đã cập nhật tài khoản %{type}" + sidebar: + missing_data: Thiếu dữ liệu lịch sử + missing_data_description: "%{product} sử dụng nhà cung cấp bên thứ ba để lấy tỷ giá hối đoái lịch sử, giá chứng khoán và nhiều hơn nữa. Dữ liệu này cần thiết để tính số dư tài khoản lịch sử chính xác." + configure_providers: Cấu hình nhà cung cấp của bạn tại đây. + tabs: + all: Tất cả + assets: Tài sản + debts: Nợ + new_asset: Tài sản mới + new_debt: Nợ mới + new_account: Tài khoản mới + new_account_group: "Nhóm %{account_group} mới" + types: + depository: Tiền mặt + investment: Đầu tư + crypto: Tiền mã hóa + property: Bất động sản + vehicle: Phương tiện + other_asset: Tài sản khác + credit_card: Thẻ tín dụng + loan: Khoản vay + other_liability: Nợ khác + types_plural: + depository: Tiền mặt + investment: Đầu tư + crypto: Tiền mã hóa + property: Bất động sản + vehicle: Phương tiện + other_asset: Tài sản khác + credit_card: Thẻ tín dụng + loan: Khoản vay + other_liability: Nợ khác + tax_treatments: + taxable: Chịu thuế + tax_deferred: Hoãn thuế + tax_exempt: Miễn thuế + tax_advantaged: Ưu đãi thuế + tax_treatment_descriptions: + taxable: Lợi nhuận bị đánh thuế khi thực hiện + tax_deferred: Đóng góp được khấu trừ, đánh thuế khi rút + tax_exempt: Đóng góp sau thuế, lợi nhuận không bị đánh thuế + tax_advantaged: Lợi ích thuế đặc biệt có điều kiện + subtype_regions: + us: Hoa Kỳ + uk: Vương quốc Anh + ca: Canada + au: Úc + eu: Châu Âu + in: Ấn Độ + generic: Chung + confirm_unlink: + title: Hủy liên kết tài khoản với nhà cung cấp? + description_html: "Bạn đang hủy liên kết %{account_name} khỏi %{provider_name}. Tài khoản này sẽ được chuyển thành tài khoản thủ công." + warning_title: Điều này có nghĩa là gì + warning_no_sync: Tài khoản sẽ không còn tự động đồng bộ với nhà cung cấp + warning_manual_updates: Bạn cần thêm giao dịch và cập nhật số dư thủ công + warning_transactions_kept: Tất cả giao dịch và số dư hiện có sẽ được giữ nguyên + warning_can_delete: Sau khi hủy liên kết, bạn có thể xóa tài khoản nếu cần + confirm_button: Xác nhận và hủy liên kết + unlink: + success: "Tài khoản đã được hủy liên kết thành công. Bây giờ là tài khoản thủ công." + not_linked: "Tài khoản chưa được liên kết với nhà cung cấp" + error: "Hủy liên kết tài khoản thất bại: %{error}" + generic_error: "Đã xảy ra lỗi không mong muốn. Vui lòng thử lại." + select_provider: + title: Chọn nhà cung cấp để liên kết + description: "Chọn nhà cung cấp bạn muốn dùng để liên kết %{account_name}" + already_linked: "Tài khoản đã được liên kết với nhà cung cấp" + no_providers: "Hiện không có nhà cung cấp nào được cấu hình" + + email_confirmations: + new: + invalid_token: Liên kết xác nhận không hợp lệ hoặc đã hết hạn. + success_login: Email của bạn đã được xác nhận. Vui lòng đăng nhập bằng địa chỉ email mới. diff --git a/config/locales/views/admin/invitations/vi.yml b/config/locales/views/admin/invitations/vi.yml new file mode 100644 index 000000000..f7c81bb5e --- /dev/null +++ b/config/locales/views/admin/invitations/vi.yml @@ -0,0 +1,8 @@ +--- +vi: + admin: + invitations: + destroy: + success: "Lời mời đã được xóa." + destroy_all: + success: "Tất cả lời mời của gia đình này đã được xóa." diff --git a/config/locales/views/admin/sso_providers/vi.yml b/config/locales/views/admin/sso_providers/vi.yml new file mode 100644 index 000000000..906455c11 --- /dev/null +++ b/config/locales/views/admin/sso_providers/vi.yml @@ -0,0 +1,138 @@ +--- +vi: + admin: + unauthorized: "Bạn không được phép truy cập khu vực này." + sso_providers: + index: + page_title: "Nhà cung cấp SSO" + title: "Nhà cung cấp SSO" + description: "Quản lý các nhà cung cấp xác thực đăng nhập một lần cho phiên bản của bạn." + restart_required: "Các thay đổi yêu cầu khởi động lại máy chủ để có hiệu lực." + configured_providers: "Nhà cung cấp đã cấu hình" + add_provider: "Thêm nhà cung cấp" + no_providers_title: "Không có nhà cung cấp SSO" + no_providers_message: "Chưa có nhà cung cấp SSO nào được cấu hình." + note: "Các thay đổi đối với nhà cung cấp SSO yêu cầu khởi động lại máy chủ để có hiệu lực. Ngoài ra, hãy bật cờ tính năng AUTH_PROVIDERS_SOURCE=db để tải nhà cung cấp từ cơ sở dữ liệu một cách động." + enabled: "Đã bật" + disabled: "Đã tắt" + edit: "Chỉnh sửa" + enable: "Bật" + disable: "Tắt" + delete: "Xóa" + configuration_mode: "Chế độ cấu hình" + db_backed_providers: "Nhà cung cấp dựa trên cơ sở dữ liệu" + db_backed_providers_description: "Tải nhà cung cấp từ cơ sở dữ liệu thay vì cấu hình YAML" + db_backed_providers_help_html: "Đặt AUTH_PROVIDERS_SOURCE=db để bật nhà cung cấp dựa trên cơ sở dữ liệu. Điều này cho phép thay đổi mà không cần khởi động lại máy chủ." + table: + name: "Tên" + strategy: "Chiến lược" + status: "Trạng thái" + issuer: "Nhà phát hành" + actions: "Hành động" + enabled: "Đã bật" + disabled: "Đã tắt" + legacy_providers_title: "Nhà cung cấp được cấu hình qua môi trường" + legacy_providers_notice: "Các nhà cung cấp này được cấu hình qua biến môi trường hoặc YAML và không thể quản lý thông qua giao diện này. Để quản lý ở đây, hãy di chuyển chúng sang nhà cung cấp dựa trên cơ sở dữ liệu bằng cách bật AUTH_PROVIDERS_SOURCE=db và tạo lại chúng trong giao diện." + env_configured: "Môi trường/YAML" + new: + title: "Thêm nhà cung cấp SSO" + description: "Cấu hình nhà cung cấp xác thực đăng nhập một lần mới" + edit: + title: "Chỉnh sửa nhà cung cấp SSO" + description: "Cập nhật cấu hình cho %{label}" + create: + success: "Nhà cung cấp SSO đã được tạo thành công." + update: + success: "Nhà cung cấp SSO đã được cập nhật thành công." + destroy: + success: "Nhà cung cấp SSO đã được xóa thành công." + confirm: "Bạn có chắc chắn muốn xóa nhà cung cấp này không? Hành động này không thể hoàn tác." + toggle: + success_enabled: "Nhà cung cấp SSO đã được bật thành công." + success_disabled: "Nhà cung cấp SSO đã được tắt thành công." + confirm_enable: "Bạn có chắc chắn muốn bật nhà cung cấp này không?" + confirm_disable: "Bạn có chắc chắn muốn tắt nhà cung cấp này không?" + form: + basic_information: "Thông tin cơ bản" + oauth_configuration: "Cấu hình OAuth/OIDC" + strategy_label: "Chiến lược" + strategy_help: "Chiến lược xác thực cần sử dụng" + strategy_openid_connect: "OpenID Connect" + strategy_saml: "SAML 2.0" + strategy_google_oauth2: "Google OAuth2" + strategy_github: "GitHub" + name_label: "Tên" + name_placeholder: "ví dụ: keycloak, authentik" + name_help: "Mã định danh duy nhất (chỉ chữ thường, số, dấu gạch dưới)" + label_label: "Nhãn nút" + label_placeholder: "ví dụ: Đăng nhập với Keycloak" + label_help: "Văn bản nút hiển thị cho người dùng" + icon_label: "Biểu tượng (tùy chọn)" + icon_placeholder: "ví dụ: key, shield" + icon_help: "Tên biểu tượng Lucide cho nút đăng nhập" + enabled_label: "Bật nhà cung cấp này" + enabled_help: "Người dùng có thể đăng nhập với nhà cung cấp này khi được bật" + issuer_label: "URL nhà phát hành" + issuer_placeholder: "https://your-idp.example.com/realms/your-realm" + issuer_help: "URL nhà phát hành OIDC (xác thực .well-known/openid-configuration)" + client_id_label: "Client ID" + client_id_placeholder: "your-client-id" + client_id_help: "OAuth client ID từ nhà cung cấp danh tính của bạn" + client_secret_label: "Client Secret" + client_secret_placeholder_new: "your-client-secret" + client_secret_placeholder_existing: "••••••••" + client_secret_help: "OAuth client secret (được mã hóa trong cơ sở dữ liệu)" + client_secret_help_existing: "Để trống để giữ nguyên secret hiện tại" + redirect_uri_label: "URL Callback" + redirect_uri_placeholder: "https://yourdomain.com/auth/openid_connect/callback" + redirect_uri_help: "Cấu hình URL này trong nhà cung cấp danh tính của bạn" + saml_sp_callback_url_label: "URL Callback SP (ACS URL)" + saml_sp_callback_url_help: "Cấu hình URL này là URL Assertion Consumer Service trong IdP của bạn" + copy_button: "Sao chép" + cancel: "Hủy" + submit: "Lưu nhà cung cấp" + create_provider: "Tạo nhà cung cấp" + update_provider: "Cập nhật nhà cung cấp" + errors_title: + one: "Một lỗi đã ngăn không thể lưu nhà cung cấp này:" + other: "%{count} lỗi đã ngăn không thể lưu nhà cung cấp này:" + provisioning_title: "Cấp phát người dùng" + default_role_label: "Vai trò mặc định cho người dùng mới" + default_role_help: "Vai trò được gán cho người dùng được tạo qua cấp phát tài khoản SSO tức thời (JIT). Mặc định là Thành viên." + role_guest: "Khách" + role_member: "Thành viên" + role_admin: "Quản trị viên" + role_super_admin: "Quản trị viên cấp cao" + role_mapping_title: "Ánh xạ nhóm sang vai trò (tùy chọn)" + role_mapping_help: "Ánh xạ các nhóm/claims của IdP sang vai trò ứng dụng. Người dùng được gán vai trò khớp cao nhất. Để trống để sử dụng vai trò mặc định ở trên." + super_admin_groups: "Nhóm quản trị viên cấp cao" + admin_groups: "Nhóm quản trị viên" + guest_groups: "Nhóm khách" + member_groups: "Nhóm thành viên" + groups_help: "Danh sách tên nhóm IdP phân cách bằng dấu phẩy. Dùng * để khớp tất cả các nhóm." + advanced_title: "Cài đặt OIDC nâng cao" + scopes_label: "Phạm vi tùy chỉnh" + scopes_help: "Danh sách phạm vi OIDC phân cách bằng dấu cách. Để trống cho mặc định (openid email profile). Thêm 'groups' để lấy claims nhóm." + prompt_label: "Lệnh nhắc xác thực" + prompt_default: "Mặc định (IdP quyết định)" + prompt_login: "Buộc đăng nhập (xác thực lại)" + prompt_consent: "Buộc đồng ý (ủy quyền lại)" + prompt_select_account: "Chọn tài khoản (chọn tài khoản)" + prompt_none: "Không nhắc (xác thực im lặng)" + prompt_help: "Kiểm soát cách IdP nhắc người dùng trong quá trình xác thực." + test_connection: "Kiểm tra kết nối" + saml_configuration: "Cấu hình SAML" + idp_metadata_url: "URL siêu dữ liệu IdP" + idp_metadata_url_help: "URL đến siêu dữ liệu SAML của IdP. Nếu được cung cấp, các cài đặt SAML khác sẽ được cấu hình tự động." + manual_saml_config: "Cấu hình thủ công (nếu không sử dụng URL siêu dữ liệu)" + manual_saml_help: "Chỉ sử dụng các cài đặt này nếu IdP của bạn không cung cấp URL siêu dữ liệu." + idp_sso_url: "URL SSO của IdP" + idp_slo_url: "URL SLO của IdP (tùy chọn)" + idp_certificate: "Chứng chỉ IdP" + idp_certificate_help: "Chứng chỉ X.509 ở định dạng PEM. Bắt buộc nếu không sử dụng URL siêu dữ liệu." + idp_cert_fingerprint: "Dấu vân tay chứng chỉ (thay thế)" + name_id_format: "Định dạng NameID" + name_id_email: "Địa chỉ email (mặc định)" + name_id_persistent: "Liên tục" + name_id_transient: "Tạm thời" + name_id_unspecified: "Không xác định" diff --git a/config/locales/views/admin/users/vi.yml b/config/locales/views/admin/users/vi.yml new file mode 100644 index 000000000..0e1c2a2c0 --- /dev/null +++ b/config/locales/views/admin/users/vi.yml @@ -0,0 +1,53 @@ +--- +vi: + admin: + users: + index: + title: "Quản lý người dùng" + description: "Quản lý vai trò người dùng cho phiên bản của bạn. Quản trị viên cấp cao có thể truy cập cài đặt nhà cung cấp SSO và quản lý người dùng." + section_title: "Gia đình / Nhóm" + you: "(Bạn)" + trial_ends_at: "Kết thúc dùng thử" + not_available: "n/a" + no_users: "Không tìm thấy người dùng nào." + unnamed_family: "Gia đình/Nhóm chưa đặt tên" + no_subscription: "Không có gói đăng ký" + family_summary: "%{members} thành viên · %{accounts} tài khoản · %{transactions} giao dịch" + filters: + role: "Vai trò" + role_all: "Tất cả vai trò" + trial_status: "Trạng thái dùng thử" + trial_all: "Tất cả" + trial_expiring_soon: "Hết hạn trong 7 ngày" + trial_trialing: "Đang dùng thử" + submit: "Lọc" + summary: + trials_expiring_7_days: "Các bản dùng thử hết hạn trong 7 ngày tới" + table: + user: "Người dùng" + trial_ends_at: "Kết thúc dùng thử" + family_accounts: "Tài khoản gia đình" + family_transactions: "Giao dịch gia đình" + last_login: "Đăng nhập lần cuối" + session_count: "Số phiên" + never: "Chưa bao giờ" + role: "Vai trò" + role_descriptions_title: "Mô tả vai trò" + roles: + guest: "Khách" + member: "Thành viên" + admin: "Quản trị viên" + super_admin: "Quản trị viên cấp cao" + role_descriptions: + guest: "Trải nghiệm ưu tiên trợ lý với quyền hạn bị hạn chế có chủ ý cho quy trình giới thiệu." + member: "Quyền truy cập người dùng cơ bản. Có thể quản lý tài khoản, giao dịch và cài đặt của riêng họ." + admin: "Quản trị viên gia đình. Có thể truy cập các cài đặt nâng cao như khóa API, nhập dữ liệu và lệnh AI." + super_admin: "Quản trị viên phiên bản. Có thể quản lý nhà cung cấp SSO, vai trò người dùng và mạo danh người dùng để hỗ trợ." + invitations: + pending_label: "Đã mời (đang chờ)" + expires: "Hết hạn %{date}" + delete: "Xóa" + delete_all: "Xóa tất cả" + update: + success: "Vai trò người dùng đã được cập nhật thành công." + failure: "Không thể cập nhật vai trò người dùng." diff --git a/config/locales/views/application/vi.yml b/config/locales/views/application/vi.yml new file mode 100644 index 000000000..c7f0c3c6e --- /dev/null +++ b/config/locales/views/application/vi.yml @@ -0,0 +1,10 @@ +--- +vi: + number: + currency: + format: + delimiter: "," + format: "%u%n" + precision: 2 + separator: "." + unit: "$" diff --git a/config/locales/views/binance_items/vi.yml b/config/locales/views/binance_items/vi.yml new file mode 100644 index 000000000..2066870ef --- /dev/null +++ b/config/locales/views/binance_items/vi.yml @@ -0,0 +1,75 @@ +--- +vi: + binance_items: + create: + default_name: Binance + success: Đã kết nối thành công với Binance! Tài khoản của bạn đang được đồng bộ. + update: + success: Đã cập nhật cấu hình Binance thành công. + destroy: + success: Đã lên lịch xóa kết nối Binance. + setup_accounts: + title: Nhập tài khoản Binance + subtitle: Chọn danh mục đầu tư muốn theo dõi + instructions: Chọn các danh mục đầu tư Binance bạn muốn nhập. Chỉ hiển thị các danh mục có số dư. + no_accounts: Tất cả tài khoản đã được nhập. + accounts_count: + one: "%{count} tài khoản có sẵn" + other: "%{count} tài khoản có sẵn" + select_all: Chọn tất cả + import_selected: Nhập đã chọn + cancel: Hủy + creating: Đang nhập... + complete_account_setup: + success: + one: "Đã nhập %{count} tài khoản" + other: "Đã nhập %{count} tài khoản" + none_selected: Chưa chọn tài khoản nào + no_accounts: Không có tài khoản nào để nhập + binance_item: + provider_name: Binance + syncing: Đang đồng bộ... + reconnect: Thông tin xác thực cần cập nhật + deletion_in_progress: Đang xóa... + sync_status: + no_accounts: Không tìm thấy tài khoản + all_synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + partial_sync: "%{linked_count} đã đồng bộ, %{unlinked_count} cần thiết lập" + status: "Đồng bộ lần cuối %{timestamp} trước" + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + status_never: Chưa bao giờ đồng bộ + update_credentials: Cập nhật thông tin xác thực + delete: Xóa + no_accounts_title: Không tìm thấy tài khoản + no_accounts_message: Danh mục đầu tư Binance của bạn sẽ xuất hiện ở đây sau khi đồng bộ. + setup_needed: Tài khoản sẵn sàng để nhập + setup_description: Chọn danh mục đầu tư Binance bạn muốn theo dõi. + setup_action: Nhập tài khoản + import_accounts_menu: Nhập tài khoản + stale_rate_warning: "Số dư là xấp xỉ — tỷ giá hối đoái chính xác cho ngày %{date} không có sẵn. Sẽ cập nhật lần đồng bộ tiếp theo." + select_existing_account: + title: Liên kết tài khoản Binance + no_accounts_found: Không tìm thấy tài khoản Binance nào. + wait_for_sync: Chờ Binance hoàn tất đồng bộ + check_provider_health: Kiểm tra xem thông tin API Binance của bạn có hợp lệ không + currently_linked_to: "Hiện đang liên kết với: %{account_name}" + link: Liên kết + cancel: Hủy + link_existing_account: + success: Đã liên kết thành công với tài khoản Binance + errors: + only_manual: Chỉ tài khoản thủ công mới có thể liên kết với Binance + invalid_binance_account: Tài khoản Binance không hợp lệ + binance_item: + syncer: + checking_credentials: Đang kiểm tra thông tin xác thực... + credentials_invalid: Thông tin API không hợp lệ. Vui lòng kiểm tra khóa API và bí mật của bạn. + importing_accounts: Đang nhập tài khoản từ Binance... + checking_configuration: Đang kiểm tra cấu hình tài khoản... + accounts_need_setup: + one: "%{count} tài khoản cần thiết lập" + other: "%{count} tài khoản cần thiết lập" + processing_accounts: Đang xử lý dữ liệu tài khoản... + calculating_balances: Đang tính toán số dư... diff --git a/config/locales/views/brex_items/vi.yml b/config/locales/views/brex_items/vi.yml new file mode 100644 index 000000000..5e44d02ec --- /dev/null +++ b/config/locales/views/brex_items/vi.yml @@ -0,0 +1,277 @@ +--- +vi: + brex_items: + default_connection_name: Kết nối Brex + account_metadata: + provider: Brex + separator: " • " + kinds: + cash: Tiền mặt + card: Thẻ + statuses: + ACTIVE: Hoạt động + active: Hoạt động + CLOSED: Đã đóng + closed: Đã đóng + frozen: Bị đóng băng + FROZEN: Bị đóng băng + create: + success: Kết nối Brex đã được tạo thành công + default_card_name: Thẻ Brex + default_cash_name: "Tiền mặt Brex %{id}" + destroy: + success: Kết nối Brex đã được xóa + index: + title: Kết nối Brex + institution_summary: + none: Chưa kết nối tổ chức nào + one: "%{name}" + count: + one: "%{count} tổ chức" + other: "%{count} tổ chức" + sync_status: + no_accounts: Không tìm thấy tài khoản + all_synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + partial_setup: "%{synced} đã đồng bộ, %{pending} cần thiết lập" + api_error: + common_issues: "Các vấn đề thường gặp:" + expired_credentials: Tạo mã thông báo API mới từ Brex. + expired_credentials_label: "Thông tin xác thực hết hạn:" + heading: Không thể kết nối với Brex + invalid_token: Kiểm tra mã thông báo API của bạn trong Cài đặt nhà cung cấp. + invalid_token_label: "Mã thông báo API không hợp lệ:" + network: Kiểm tra kết nối internet của bạn. + network_label: "Sự cố mạng:" + permissions: Đảm bảo mã thông báo có quyền đọc tài khoản và giao dịch cần thiết. + permissions_label: "Quyền không đủ:" + service: API Brex có thể tạm thời không khả dụng. + service_label: "Dịch vụ gián đoạn:" + settings_link: Kiểm tra Cài đặt nhà cung cấp + title: Lỗi kết nối Brex + errors: + unexpected_error: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau. + entries: + default_name: Giao dịch Brex + loading: + loading_message: Đang tải tài khoản Brex... + loading_title: Đang tải + link_accounts: + all_already_linked: + one: "Tài khoản đã chọn (%{names}) đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết: %{names}" + api_error: "Lỗi API: %{message}" + invalid_account_names: + one: "Không thể liên kết tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + invalid_account_type: Loại tài khoản Brex không được hỗ trợ + link_failed: Liên kết tài khoản thất bại + no_accounts_selected: Vui lòng chọn ít nhất một tài khoản + no_api_token: Không tìm thấy mã thông báo API Brex. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + partial_invalid: "Đã liên kết thành công %{created_count} tài khoản, %{already_linked_count} tài khoản đã được liên kết, %{invalid_count} tài khoản có tên không hợp lệ" + partial_success: "Đã liên kết thành công %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết: %{already_linked_names}" + select_connection: Chọn kết nối Brex trước khi liên kết tài khoản. + success: + one: "Đã liên kết thành công %{count} tài khoản" + other: "Đã liên kết thành công %{count} tài khoản" + brex_item: + accounts_need_setup: Tài khoản cần thiết lập + delete: Xóa kết nối + deletion_in_progress: đang xóa... + error: Lỗi + no_accounts_description: Kết nối này chưa có tài khoản nào được liên kết. + no_accounts_title: Không có tài khoản + setup_action: Thiết lập tài khoản mới + setup_description: "%{linked} trong số %{total} tài khoản đã liên kết. Chọn loại tài khoản cho các tài khoản Brex mới được nhập." + setup_needed: Tài khoản mới sẵn sàng để thiết lập + status: "Đồng bộ %{timestamp} trước" + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + syncing: Đang đồng bộ... + total: Tổng cộng + unlinked: Chưa liên kết + provider_panel: + accounts_link: Tài khoản + add_connection: Thêm kết nối Brex + base_url_label: URL cơ sở (tùy chọn) + base_url_placeholder: https://api.brex.com + configured_html: "Đã cấu hình và sẵn sàng sử dụng. Truy cập tab %{accounts_link} để quản lý và thiết lập tài khoản." + connection_name_label: Tên kết nối + connection_name_placeholder: Tài khoản kinh doanh + default_connection_name: Kết nối Brex + disconnect_label: "Ngắt kết nối %{name}" + disconnect_confirm: "Ngắt kết nối %{name}?" + encryption_warning: + title: Mã hóa cơ sở dữ liệu chưa được cấu hình + message: Cấu hình khóa mã hóa Active Record trước khi thêm mã thông báo Brex trong môi trường sản xuất. Không có khóa mã hóa, Sure lưu trữ thông tin xác thực nhà cung cấp Brex và ảnh chụp dưới dạng văn bản thuần túy như các bản ghi nhà cung cấp khác. + instructions: + copy_token_html: "Sao chép mã thông báo và thêm làm kết nối có tên bên dưới. Sure chỉ lưu mã thông báo để đồng bộ gia đình này." + create_token: "Tạo mã thông báo API với các phạm vi chỉ đọc sau: accounts.cash.readonly, accounts.card.readonly, transactions.cash.readonly, transactions.card.readonly" + open_tokens: Đi đến cài đặt nhà phát triển/mã thông báo API Brex cho công ty bạn muốn kết nối + sign_in_html: "Truy cập %{link} và đăng nhập vào tài khoản bạn muốn kết nối" + keep_token_placeholder: Để trống để giữ mã thông báo hiện tại + not_configured: Chưa được cấu hình + sandbox_note_html: "Sử dụng kết nối có tên riêng cho mỗi công ty Brex/mã thông báo API bạn muốn đồng bộ. Để trống URL cơ sở cho môi trường sản xuất. Môi trường staging chỉ dành cho kiểm thử được Brex phê duyệt và không hoạt động với mã thông báo khách hàng." + setup_accounts: Thiết lập tài khoản + setup_title: "Hướng dẫn thiết lập:" + sync: Đồng bộ + token_label: Mã thông báo + token_placeholder: Dán mã thông báo vào đây + update_connection: Cập nhật kết nối + provider_connection: + default_description: Kết nối với tài khoản Brex của bạn + default_name: Brex + description: "Kết nối bằng %{name}" + name: "Brex - %{name}" + select_accounts: + accounts_selected: tài khoản đã chọn + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_brex: Không thể nhập - vui lòng cấu hình tên tài khoản trong Brex + description: Chọn tài khoản bạn muốn liên kết với tài khoản %{product_name} của bạn. + link_accounts: Liên kết tài khoản đã chọn + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình mã thông báo API. + no_api_token: Không tìm thấy mã thông báo API Brex. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + no_credentials_configured: Vui lòng cấu hình mã thông báo API Brex trước trong Cài đặt nhà cung cấp. + no_name_placeholder: "(Không có tên)" + select_connection: Chọn kết nối Brex trong Cài đặt nhà cung cấp. + title: Chọn tài khoản Brex + unexpected_error: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau. + select_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + all_accounts_already_linked: Tất cả tài khoản Brex đã được liên kết + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_brex: Không thể nhập - vui lòng cấu hình tên tài khoản trong Brex + description: Chọn tài khoản Brex để liên kết với tài khoản này. Giao dịch sẽ được đồng bộ và loại bỏ trùng lặp tự động. + link_account: Liên kết tài khoản + no_account_specified: Chưa chỉ định tài khoản + no_accounts_found: Không tìm thấy tài khoản Brex. Vui lòng kiểm tra cấu hình mã thông báo API. + no_api_token: Không tìm thấy mã thông báo API Brex. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + no_credentials_configured: Vui lòng cấu hình mã thông báo API Brex trước trong Cài đặt nhà cung cấp. + no_name_placeholder: "(Không có tên)" + select_connection: Chọn kết nối Brex trong Cài đặt nhà cung cấp. + title: "Liên kết %{account_name} với Brex" + unexpected_error: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau. + setup_required: + description: Trước khi liên kết tài khoản Brex, bạn cần cấu hình mã thông báo API Brex. + heading: Mã thông báo API chưa được cấu hình + settings_link: Đi đến Cài đặt nhà cung cấp + setup_steps: "Các bước thiết lập:" + steps: + enter_token: Nhập mã thông báo API Brex của bạn + find_section_html: "Tìm phần Brex" + open_settings_html: "Đi đến Cài đặt > Nhà cung cấp" + return_to_link: Quay lại đây để liên kết tài khoản + title: Cần thiết lập Brex + subtype_select: + placeholder: + subtype: Chọn loại phụ + type: Chọn loại + link_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + api_error: "Lỗi API: %{message}" + invalid_account_name: Không thể liên kết tài khoản không có tên + missing_parameters: Thiếu tham số bắt buộc + no_account_specified: Chưa chỉ định tài khoản + no_api_token: Không tìm thấy mã thông báo API Brex. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + provider_account_already_linked: Tài khoản Brex này đã được liên kết với tài khoản khác + provider_account_not_found: Không tìm thấy tài khoản Brex + select_connection: Chọn kết nối Brex trước khi liên kết tài khoản. + success: "Đã liên kết thành công %{account_name} với Brex" + setup_accounts: + account_type_label: "Loại tài khoản:" + all_accounts_linked: "Tất cả tài khoản Brex của bạn đã được thiết lập." + api_error: "Lỗi API: %{message}" + fetch_failed: "Tải tài khoản thất bại" + no_accounts_to_setup: "Không có tài khoản nào để thiết lập" + no_api_token: Không tìm thấy mã thông báo API Brex. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + account_types: + skip: Bỏ qua tài khoản này + depository: Tài khoản thanh toán hoặc tiết kiệm + credit_card: Thẻ tín dụng + investment: Tài khoản đầu tư + loan: Vay hoặc thế chấp + other_asset: Tài sản khác + subtype_labels: + depository: "Loại phụ tài khoản:" + credit_card: "" + investment: "Loại đầu tư:" + loan: "Loại vay:" + other_asset: "" + subtype_messages: + credit_card: "Thẻ tín dụng sẽ được tự động thiết lập dưới dạng tài khoản thẻ tín dụng." + other_asset: "Không cần tùy chọn bổ sung cho Tài sản khác." + subtypes: + depository: + checking: Tài khoản thanh toán + savings: Tài khoản tiết kiệm + hsa: Tài khoản tiết kiệm y tế + cd: Chứng chỉ tiền gửi + money_market: Thị trường tiền tệ + investment: + brokerage: Brokerage + pension: Lương hưu + retirement: Hưu trí + "401k": "401(k)" + roth_401k: "Roth 401(k)" + "403b": "403(b)" + tsp: Thrift Savings Plan + "529_plan": "529 Plan" + hsa: Tài khoản tiết kiệm y tế + mutual_fund: Quỹ tương hỗ + ira: Traditional IRA + roth_ira: Roth IRA + angel: Angel + loan: + mortgage: Thế chấp + student: Vay sinh viên + auto: Vay mua xe + other: Vay khác + balance: Số dư + cancel: Hủy + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Brex:" + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + historical_data_range: "Phạm vi dữ liệu lịch sử:" + subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + sync_start_date_help: Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ. Tối đa 3 năm lịch sử có sẵn. + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + title: Thiết lập tài khoản Brex của bạn + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + creation_failed: "Tạo tài khoản thất bại: %{error}" + creation_failed_count: "Tạo %{count} tài khoản thất bại." + no_accounts: "Không có tài khoản nào để thiết lập." + partial_skipped: "Đã tạo thành công %{created_count} tài khoản; %{skipped_count} tài khoản đã bị bỏ qua." + partial_success: "Đã tạo thành công %{created_count} tài khoản, nhưng %{failed_count} tài khoản thất bại." + success: "Đã tạo thành công %{count} tài khoản." + unexpected_error: Đã xảy ra lỗi không mong muốn. + sync: + success: Đã bắt đầu đồng bộ + syncer: + account_processing_failed: + one: "%{count} tài khoản Brex gặp lỗi khi xử lý." + other: "%{count} tài khoản Brex gặp lỗi khi xử lý." + account_sync_failed: + one: "%{count} đồng bộ tài khoản Brex không thể được lên lịch." + other: "%{count} đồng bộ tài khoản Brex không thể được lên lịch." + accounts_need_setup: + one: "%{count} tài khoản cần thiết lập..." + other: "%{count} tài khoản cần thiết lập..." + accounts_failed: + one: "%{count} tài khoản Brex nhập thất bại." + other: "%{count} tài khoản Brex nhập thất bại." + calculating_balances: Đang tính toán số dư... + checking_account_configuration: Đang kiểm tra cấu hình tài khoản... + credentials_invalid: Mã thông báo API Brex hoặc quyền tài khoản không hợp lệ + failed: Đồng bộ thất bại. Vui lòng thử lại hoặc liên hệ hỗ trợ. + import_failed: Nhập Brex thất bại. + importing_accounts: Đang nhập tài khoản từ Brex... + processing_transactions: Đang xử lý giao dịch... + transactions_failed: + one: "%{count} tài khoản Brex gặp lỗi nhập giao dịch." + other: "%{count} tài khoản Brex gặp lỗi nhập giao dịch." + update: + success: Kết nối Brex đã được cập nhật diff --git a/config/locales/views/budgets/vi.yml b/config/locales/views/budgets/vi.yml new file mode 100644 index 000000000..f2f8e59cb --- /dev/null +++ b/config/locales/views/budgets/vi.yml @@ -0,0 +1,97 @@ +--- +vi: + budgets: + budget_donut: + spent: "Đã chi" + new_budget: "Ngân sách mới" + of_budget: "trong %{amount}" + unused: "Chưa dùng" + budget_header: + today: "Hôm nay" + budget_nav: + categories: Danh mục + setup: Thiết lập + over_allocation_warning: + over_allocated_message: "Bạn đã phân bổ vượt ngân sách. Vui lòng điều chỉnh lại." + fix_allocations: "Sửa phân bổ" + actuals_summary: + income: "Thu nhập" + expenses: "Chi tiêu" + budgeted_summary: + expected_income: "Thu nhập dự kiến" + budgeted: "Đã lập ngân sách" + earned: "%{amount} đã kiếm được" + over: "%{amount} vượt" + left: "%{amount} còn lại" + spent: "%{amount} đã chi" + edit: + setup_title: "Thiết lập ngân sách" + setup_description: "Nhập thu nhập hàng tháng và chi tiêu kế hoạch bên dưới để thiết lập ngân sách." + budgeted_spending: "Chi tiêu theo ngân sách" + expected_income: "Thu nhập dự kiến" + autosuggest_title: "Tự động đề xuất ngân sách thu nhập & chi tiêu" + autosuggest_description: "Dựa trên lịch sử giao dịch. AI có thể mắc lỗi, hãy xác minh trước khi tiếp tục." + continue: "Tiếp tục" + name: + custom_range: "%{start} - %{end_date}" + month_year: "%{month}" + show: + categories: + amount: Số tiền + edit: Chỉnh sửa + title: Danh mục + on_track_categories: + short_title: Đúng kế hoạch + title: Đúng kế hoạch + over_budget_categories: + short_title: Vượt ngân sách + title: Vượt ngân sách + filter: + all: Tất cả + on_track: Đúng kế hoạch + over_budget: Vượt ngân sách + tabs: + actual: Thực tế + budgeted: Ngân sách + copy_previous_prompt: + title: "Thiết lập ngân sách" + description: "Bạn có thể sao chép ngân sách từ %{source_name} hoặc bắt đầu mới." + copy_button: "Sao chép từ %{source_name}" + fresh_button: "Bắt đầu mới" + copy_previous: + success: "Đã sao chép ngân sách từ %{source_name}" + no_source: "Không tìm thấy ngân sách trước để sao chép" + already_initialized: "Ngân sách này đã được thiết lập" + budget_categories: + allocation_progress: + budget_exceeded_html: 'Vượt ngân sách %{amount}' + left_to_allocate: còn lại để phân bổ + over_set: "> 100% đã đặt" + percent_set: "%{percent} đã đặt" + budget_category_form: + monthly_average: "%{amount}/tháng tb" + shared_placeholder: Chia sẻ + shared_title: Để trống để dùng chung ngân sách của danh mục cha + confirm_button: + confirm: "Xác nhận" + no_categories: + oops: "Ối!" + no_categories_message: "Bạn chưa tạo hoặc gán danh mục chi tiêu nào cho giao dịch." + use_defaults: "Dùng mặc định (khuyến nghị)" + new_category: "Danh mục mới" + index: + title: "Chỉnh sửa ngân sách danh mục" + description: "Điều chỉnh ngân sách danh mục để đặt giới hạn chi tiêu. Số tiền chưa phân bổ sẽ tự động gán là chưa phân loại." + show: + category: "Danh mục" + overview: "Tổng quan" + spending: "Chi tiêu %{date}" + status: "Trạng thái" + overspent: "chi quá" + left: "còn lại" + budgeted: "Ngân sách" + monthly_average_spending: "Chi tiêu trung bình hàng tháng" + monthly_median_spending: "Chi tiêu trung vị hàng tháng" + recent_transactions: "Giao dịch gần đây" + view_all_transactions: "Xem tất cả giao dịch trong danh mục" + no_transactions: "Không tìm thấy giao dịch trong kỳ ngân sách này." diff --git a/config/locales/views/categories/vi.yml b/config/locales/views/categories/vi.yml new file mode 100644 index 000000000..596f848d8 --- /dev/null +++ b/config/locales/views/categories/vi.yml @@ -0,0 +1,52 @@ +--- +vi: + categories: + bootstrap: + success: Đã tạo danh mục mặc định thành công + category: + delete: Xóa danh mục + edit: Chỉnh sửa danh mục + create: + success: Đã tạo danh mục thành công + destroy: + success: Đã xóa danh mục thành công + edit: + edit: Chỉnh sửa danh mục + form: + placeholder: Tên danh mục + name_label: Tên + unassigned: "(chưa gán)" + parent_category_label: "Danh mục cha (tùy chọn)" + color: Màu sắc + icon: Biểu tượng + auto_adjust: tự động điều chỉnh. + poor_contrast: "Độ tương phản kém, chọn màu tối hơn hoặc" + destroy_all: + success: Đã xóa tất cả danh mục + index: + bootstrap: Dùng mặc định (khuyến nghị) + categories: Danh mục + categories_expenses: Danh mục chi tiêu + categories_incomes: Danh mục thu nhập + delete_all: Xóa tất cả + empty: Không tìm thấy danh mục + new: Danh mục mới + menu: + loading: Đang tải... + new: + new_category: Danh mục mới + update: + success: Đã cập nhật danh mục thành công + virtual: + transfer: Chuyển khoản + payment: Thanh toán + trade: Giao dịch chứng khoán + category: + dropdowns: + show: + bootstrap: Tạo danh mục mặc định + empty: Không tìm thấy danh mục + match_transfer: "Khớp chuyển khoản/thanh toán" + one_time: "Một lần %{type}" + income: "thu nhập" + expense: "chi tiêu" diff --git a/config/locales/views/category/deletions/vi.yml b/config/locales/views/category/deletions/vi.yml new file mode 100644 index 000000000..3f22eae69 --- /dev/null +++ b/config/locales/views/category/deletions/vi.yml @@ -0,0 +1,13 @@ +--- +vi: + category: + deletions: + create: + success: Danh mục giao dịch đã được xóa thành công + new: + category: Danh mục + delete_and_leave_uncategorized: Xóa "%{category_name}" và để chưa phân loại + delete_and_recategorize: Xóa "%{category_name}" và gán danh mục mới + delete_category: Xóa danh mục? + explanation: Bằng cách xóa danh mục này, mọi giao dịch có danh mục "%{category_name}" sẽ trở thành chưa phân loại. Thay vì để chúng không được phân loại, bạn cũng có thể gán một danh mục mới bên dưới. + replacement_category_prompt: Chọn danh mục diff --git a/config/locales/views/category/dropdowns/vi.yml b/config/locales/views/category/dropdowns/vi.yml new file mode 100644 index 000000000..04cf03947 --- /dev/null +++ b/config/locales/views/category/dropdowns/vi.yml @@ -0,0 +1,11 @@ +--- +vi: + category: + dropdowns: + row: + delete: Xóa danh mục + edit: Chỉnh sửa danh mục + show: + clear: Xóa danh mục + no_categories: Không tìm thấy danh mục nào + search_placeholder: Tìm kiếm diff --git a/config/locales/views/chats/vi.yml b/config/locales/views/chats/vi.yml new file mode 100644 index 000000000..654b0fbbb --- /dev/null +++ b/config/locales/views/chats/vi.yml @@ -0,0 +1,44 @@ +--- +vi: + chats: + demo_banner_title: "Chế độ Demo đang hoạt động" + demo_banner_message: "Bạn đang sử dụng LLM thông qua tín dụng do Cloudflare Workers AI cung cấp. Kết quả có thể thay đổi vì codebase được thử nghiệm trên `gpt-4.1` nhưng token của bạn không được sử dụng để đào tạo mô hình! 🤖" + thinking: "Đang xử lý ..." + ai_greeting: + greeting: "Xin chào %{name}! Tôi là một AI/mô hình ngôn ngữ lớn có thể hỗ trợ bạn về tài chính. Tôi có quyền truy cập internet và dữ liệu tài khoản của bạn." + there: "bạn" + commands_hint_html: "Bạn có thể sử dụng / để truy cập các lệnh" + questions_intro: "Dưới đây là một số câu hỏi bạn có thể đặt:" + evaluate_portfolio: "Đánh giá danh mục đầu tư" + spending_insights: "Xem thông tin chi tiêu" + unusual_patterns: "Tìm các giao dịch bất thường" + chat: + edit_chat_title: "Chỉnh sửa tiêu đề cuộc trò chuyện" + delete_chat: "Xóa cuộc trò chuyện" + chat_nav: + all_chats: "Tất cả cuộc trò chuyện" + start_new_chat: "Bắt đầu cuộc trò chuyện mới" + edit_chat_title: "Chỉnh sửa tiêu đề cuộc trò chuyện" + delete_chat: "Xóa cuộc trò chuyện" + error: + retry: "Thử lại" + destroy: + notice: "Cuộc trò chuyện đã được xóa thành công" + index: + chats: "Cuộc trò chuyện" + new_chat: "Cuộc trò chuyện mới" + update: + success: "Cuộc trò chuyện đã được cập nhật" + ai_consent: + title: "Bật tính năng Trò chuyện AI" + available_description: "Trò chuyện AI có thể trả lời các câu hỏi tài chính và cung cấp thông tin dựa trên dữ liệu của bạn. Để sử dụng tính năng này, bạn cần bật nó một cách rõ ràng." + unavailable_description_html: "Để sử dụng trợ lý AI, bạn cần đặt biến môi trường OPENAI_ACCESS_TOKEN hoặc cấu hình nó trong phần Cài đặt Self-Hosting của phiên bản của bạn." + enable_button: "Bật Trò chuyện AI" + disable_note: "Tắt bất kỳ lúc nào. Tất cả dữ liệu gửi đến các nhà cung cấp LLM của chúng tôi đều được ẩn danh hóa." + assistant_messages: + assistant_message: + assistant_reasoning: "Lý luận của trợ lý" + tool_calls: + tool_calls: "Lệnh gọi công cụ" + function: "Hàm:" + arguments: "Đối số:" diff --git a/config/locales/views/coinbase_items/vi.yml b/config/locales/views/coinbase_items/vi.yml new file mode 100644 index 000000000..342631fd0 --- /dev/null +++ b/config/locales/views/coinbase_items/vi.yml @@ -0,0 +1,78 @@ +--- +vi: + coinbase_items: + create: + default_name: Coinbase + success: Đã kết nối thành công với Coinbase! Các tài khoản của bạn đang được đồng bộ. + update: + success: Đã cập nhật cấu hình Coinbase thành công. + destroy: + success: Đã lên lịch xóa kết nối Coinbase. + setup_accounts: + title: Nhập ví Coinbase + subtitle: Chọn ví muốn theo dõi + instructions: Chọn các ví bạn muốn nhập. Các ví chưa chọn vẫn có sẵn nếu bạn muốn thêm sau. + no_accounts: Tất cả ví đã được nhập. + accounts_count: + one: "%{count} ví có sẵn" + other: "%{count} ví có sẵn" + select_all: Chọn tất cả + import_selected: Nhập đã chọn + cancel: Hủy + creating: Đang nhập... + complete_account_setup: + success: + one: "Đã nhập %{count} ví" + other: "Đã nhập %{count} ví" + none_selected: Chưa chọn ví nào + no_accounts: Không có ví nào để nhập + coinbase_item: + provider_name: Coinbase + syncing: Đang đồng bộ... + reconnect: Thông tin xác thực cần cập nhật + deletion_in_progress: Đang xóa... + sync_status: + no_accounts: Không tìm thấy tài khoản + all_synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + partial_sync: "%{linked_count} đã đồng bộ, %{unlinked_count} cần thiết lập" + status: "Đồng bộ lần cuối %{timestamp} trước" + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + status_never: Chưa bao giờ đồng bộ + update_credentials: Cập nhật thông tin xác thực + delete: Xóa + no_accounts_title: Không tìm thấy tài khoản + no_accounts_message: Các ví Coinbase của bạn sẽ xuất hiện ở đây sau khi đồng bộ. + setup_needed: Ví sẵn sàng để nhập + setup_description: Chọn ví Coinbase bạn muốn theo dõi. + setup_action: Nhập ví + import_wallets_menu: Nhập ví + more_wallets_available: + one: "%{count} ví khác có sẵn để nhập" + other: "%{count} ví khác có sẵn để nhập" + select_existing_account: + title: Liên kết tài khoản Coinbase + no_accounts_found: Không tìm thấy tài khoản Coinbase nào. + wait_for_sync: Chờ Coinbase hoàn tất đồng bộ + check_provider_health: Kiểm tra xem thông tin API Coinbase của bạn có hợp lệ không + balance: Số dư + currently_linked_to: "Hiện đang liên kết với: %{account_name}" + link: Liên kết + cancel: Hủy + link_existing_account: + success: Đã liên kết thành công với tài khoản Coinbase + errors: + only_manual: Chỉ tài khoản thủ công mới có thể liên kết với Coinbase + invalid_coinbase_account: Tài khoản Coinbase không hợp lệ + coinbase_item: + syncer: + checking_credentials: Đang kiểm tra thông tin xác thực... + credentials_invalid: Thông tin API không hợp lệ. Vui lòng kiểm tra khóa API và bí mật của bạn. + importing_accounts: Đang nhập tài khoản từ Coinbase... + checking_configuration: Đang kiểm tra cấu hình tài khoản... + accounts_need_setup: + one: "%{count} tài khoản cần thiết lập" + other: "%{count} tài khoản cần thiết lập" + processing_accounts: Đang xử lý dữ liệu tài khoản... + calculating_balances: Đang tính toán số dư... diff --git a/config/locales/views/coinstats_items/vi.yml b/config/locales/views/coinstats_items/vi.yml new file mode 100644 index 000000000..5ec0b638e --- /dev/null +++ b/config/locales/views/coinstats_items/vi.yml @@ -0,0 +1,75 @@ +--- +vi: + coinstats_items: + create: + success: Kết nối nhà cung cấp CoinStats đã được cấu hình thành công. + default_name: Kết nối CoinStats + errors: + validation_failed: "Xác thực thất bại: %{message}." + update: + success: Kết nối nhà cung cấp CoinStats đã được cập nhật thành công. + errors: + validation_failed: "Xác thực thất bại: %{message}." + destroy: + success: Kết nối nhà cung cấp CoinStats đã được lên lịch xóa. + link_wallet: + success: "%{count} ví tiền điện tử đã được liên kết thành công." + missing_params: "Thiếu tham số bắt buộc: địa chỉ và blockchain." + failed: Liên kết ví tiền điện tử thất bại. + error: "Liên kết ví tiền điện tử thất bại: %{message}." + link_exchange: + success: "%{name} sàn giao dịch đã được liên kết." + missing_params: Sàn giao dịch và thông tin xác thực là bắt buộc. + invalid_exchange: Sàn giao dịch đã chọn không còn được hỗ trợ. + failed: Liên kết sàn giao dịch thất bại. + error: "Liên kết sàn giao dịch thất bại: %{message}." + new: + title: Liên kết tiền điện tử với CoinStats + blockchain_fetch_error: Tải blockchain thất bại. Vui lòng thử lại sau. + link_wallet_title: Liên kết địa chỉ ví + link_wallet_description: Theo dõi ví tự quản hoặc địa chỉ on-chain đơn lẻ qua CoinStats. + address_label: Địa chỉ + address_placeholder: Bắt buộc + blockchain_label: Blockchain + blockchain_placeholder: Bắt buộc + blockchain_select_blank: Chọn một Blockchain + link_wallet_submit: Liên kết ví tiền điện tử + link_exchange_title: Liên kết API sàn giao dịch + link_exchange_description: Sử dụng khóa API chỉ đọc của sàn giao dịch để CoinStats có thể đồng bộ số dư và giao dịch từ Bitvavo, Binance và các sàn được hỗ trợ khác. + link_exchange_note: Nếu sàn giao dịch của bạn yêu cầu kích hoạt khóa API hoặc xác nhận qua email, hãy hoàn tất bước đó trước khi liên kết ở đây. + exchange_select_blank: Chọn một sàn giao dịch + exchange_label: Sàn giao dịch + link_exchange_submit: Liên kết sàn giao dịch + not_configured_title: Kết nối nhà cung cấp CoinStats chưa được cấu hình + not_configured_message: Để liên kết ví tiền điện tử hoặc sàn giao dịch, bạn phải cấu hình kết nối nhà cung cấp CoinStats trước. + not_configured_step1_html: Đi đến Cài đặt → Nhà cung cấp + not_configured_step2_html: Tìm nhà cung cấp CoinStats + not_configured_step3_html: Làm theo hướng dẫn thiết lập được cung cấp để hoàn tất cấu hình nhà cung cấp + go_to_settings: Đi đến Cài đặt nhà cung cấp + setup_instructions: "Hướng dẫn thiết lập:" + step1_html: Truy cập CoinStats Public API Dashboard để lấy khóa API. + step2: Nhập khóa API của bạn bên dưới và nhấn Cấu hình. + step3_html: Sau khi kết nối thành công, truy cập tab Tài khoản để thiết lập tài khoản tiền điện tử. + api_key_label: Khóa API + api_key_placeholder: Bắt buộc + configure: Cấu hình + update_configuration: Cấu hình lại + default_name: Kết nối CoinStats + coinstats_item: + deletion_in_progress: Dữ liệu ví tiền điện tử đang được xóa… + provider_name: CoinStats + syncing: Đang đồng bộ… + sync_status: + no_accounts: Không tìm thấy ví tiền điện tử + all_synced: + one: "%{count} ví tiền điện tử đã đồng bộ" + other: "%{count} ví tiền điện tử đã đồng bộ" + partial_sync: "%{linked_count} ví tiền điện tử đã đồng bộ, %{unlinked_count} cần thiết lập" + reconnect: Kết nối lại + status: Đồng bộ lần cuối %{timestamp} trước + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước • %{summary}" + update_api_key: Cập nhật khóa API + delete: Xóa + no_wallets_title: Không có ví tiền điện tử nào được kết nối + no_wallets_message: Hiện không có ví tiền điện tử nào được kết nối với CoinStats. diff --git a/config/locales/views/components/vi.yml b/config/locales/views/components/vi.yml new file mode 100644 index 000000000..fc8f5ea88 --- /dev/null +++ b/config/locales/views/components/vi.yml @@ -0,0 +1,162 @@ +--- +vi: + UI: + account: + activity_feed: + toggle_selection_checkboxes: Bật/tắt chọn + balance_reconciliation: + labels: + adjustments: Điều chỉnh + buys: Mua vào + change_in_brokerage_cash: Thay đổi tiền mặt môi giới + change_in_holdings_market: Thay đổi danh mục (giá thị trường) + change_in_holdings_trades: Thay đổi danh mục (mua/bán) + charges: Phí phát sinh + end_balance: Số dư cuối + end_principal: Gốc cuối + end_value: Giá trị cuối + final_balance: Số dư cuối cùng + final_principal: Gốc cuối cùng + final_value: Giá trị cuối cùng + market_changes: Biến động thị trường + net_cash_flow: Dòng tiền thuần + net_principal_change: Thay đổi gốc thuần + net_value_change: Thay đổi giá trị thuần + payments: Thanh toán + sells: Bán ra + start_balance: Số dư đầu + start_principal: Gốc đầu + start_value: Giá trị đầu + tooltips: + adjustments: Điều chỉnh thủ công hoặc điều chỉnh khác + adjustments_asset: Điều chỉnh giá trị thủ công hoặc thẩm định + buys: Mua tiền mã hóa trong ngày + change_in_brokerage_cash: Thay đổi tiền mặt thuần từ nạp/rút và giao dịch + change_in_holdings_market: Thay đổi giá trị danh mục do biến động giá thị trường + change_in_holdings_trades: Tác động đến danh mục từ mua bán chứng khoán + charges: Phí phát sinh mới trong ngày + end_balance: Số dư tính toán sau tất cả giao dịch + end_balance_investment: Số dư tính toán sau tất cả hoạt động + end_principal: Gốc tính toán sau tất cả giao dịch + end_value: Giá trị tính toán sau tất cả thay đổi + final_balance: Số dư tài khoản cuối cùng trong ngày + final_balance_credit: Số dư nợ cuối cùng trong ngày + final_balance_crypto: Giá trị danh mục tiền mã hóa cuối cùng trong ngày + final_balance_investment: Giá trị danh mục đầu tư cuối cùng trong ngày + final_principal: Số dư gốc cuối cùng trong ngày + final_value: Giá trị tài sản cuối cùng trong ngày + market_changes: Thay đổi giá trị do biến động giá thị trường + net_cash_flow: Thay đổi số dư thuần từ tất cả giao dịch trong ngày + net_principal_change: Thanh toán gốc và khoản vay mới trong ngày + net_value_change: Tất cả thay đổi giá trị bao gồm cải thiện và khấu hao + payments: Thanh toán thẻ trong ngày + sells: Bán tiền mã hóa trong ngày + start_balance: Số dư tài khoản đầu ngày + start_balance_credit: Số dư nợ đầu ngày + start_balance_crypto: Giá trị danh mục tiền mã hóa đầu ngày + start_balance_investment: Tổng giá trị danh mục đầu tư đầu ngày + start_principal: Số dư gốc đầu ngày + start_value: Giá trị tài sản đầu ngày + chart: + no_data_available: "Không có dữ liệu" + title: + balance: Số dư + cash_value: Giá trị tiền mặt + debt_balance: Số dư nợ + estimated_property_value: Giá trị bất động sản ước tính + estimated_vehicle_value: Giá trị phương tiện ước tính + holdings_value: Giá trị danh mục + remaining_principal_balance: Số dư gốc còn lại + total_account_value: Tổng giá trị tài khoản + views: + cash: Tiền mặt + holdings: Danh mục + total_value: Tổng giá trị + vs_available_history: so với lịch sử hiện có + activity_date: + balance_tooltip: "Số dư cuối ngày, sau tất cả giao dịch và điều chỉnh" + no_balance_data: "Không có dữ liệu số dư cho ngày này" + ds: + alert: + variants: + info: Thông tin + success: Thành công + warning: Cảnh báo + error: Lỗi + destructive: Lỗi + pill: + aria_label: "%{label}" + default_label: Xem trước + dialog: + close: Đóng + popover: + avatar_default_label: Mở menu + tooltip: + trigger_label: Thêm thông tin + link: + opens_in_new_tab: (mở trong tab mới) + provider_sync_summary: + title: Tóm tắt đồng bộ + last_sync: "Đồng bộ lần cuối: %{time_ago} trước" + accounts: + title: Tài khoản + total: "Tổng: %{count}" + linked: "Đã liên kết: %{count}" + unlinked: "Chưa liên kết: %{count}" + institutions: "Tổ chức: %{count}" + transactions: + title: Giao dịch + seen: "Đã thấy: %{count}" + imported: "Đã nhập: %{count}" + updated: "Đã cập nhật: %{count}" + skipped: "Đã bỏ qua: %{count}" + fetching: "Đang tải từ sàn giao dịch..." + protected: + one: "%{count} mục được bảo vệ (không ghi đè)" + other: "%{count} mục được bảo vệ (không ghi đè)" + view_protected: Xem các mục được bảo vệ + skip_reasons: + excluded: Đã loại trừ + user_modified: Người dùng đã sửa + import_locked: Nhập CSV + protected: Được bảo vệ + holdings: + title: Danh mục nắm giữ + found: "Tìm thấy: %{count}" + processed: "Đã xử lý: %{count}" + trades: + title: Giao dịch chứng khoán + imported: "Đã nhập: %{count}" + skipped: "Đã bỏ qua: %{count}" + fetching: "Đang tải hoạt động từ sàn giao dịch..." + health: + title: Tình trạng + view_error_details: Xem chi tiết lỗi + rate_limited: "Bị giới hạn tốc độ %{time_ago}" + recently: gần đây + errors: "Lỗi: %{count}" + pending_reconciled: + one: "%{count} giao dịch chờ trùng lặp đã được đối chiếu" + other: "%{count} giao dịch chờ trùng lặp đã được đối chiếu" + view_reconciled: Xem giao dịch đã đối chiếu + duplicate_suggestions: + one: "%{count} giao dịch có thể trùng lặp cần xem xét" + other: "%{count} giao dịch có thể trùng lặp cần xem xét" + view_duplicate_suggestions: Xem các giao dịch trùng lặp được đề xuất + stale_pending: + one: "%{count} giao dịch chờ cũ (không tính vào ngân sách)" + other: "%{count} giao dịch chờ cũ (không tính vào ngân sách)" + view_stale_pending: Xem các tài khoản bị ảnh hưởng + stale_pending_count: + one: "%{count} giao dịch" + other: "%{count} giao dịch" + stale_unmatched: + one: "%{count} giao dịch chờ cần xem xét thủ công" + other: "%{count} giao dịch chờ cần xem xét thủ công" + view_stale_unmatched: Xem giao dịch cần xem xét + stale_unmatched_count: + one: "%{count} giao dịch" + other: "%{count} giao dịch" + data_warnings: "Cảnh báo dữ liệu: %{count}" + notices: "Thông báo: %{count}" + view_data_quality: Xem chi tiết chất lượng dữ liệu diff --git a/config/locales/views/credit_cards/vi.yml b/config/locales/views/credit_cards/vi.yml new file mode 100644 index 000000000..96fd56c1e --- /dev/null +++ b/config/locales/views/credit_cards/vi.yml @@ -0,0 +1,26 @@ +--- +vi: + credit_cards: + edit: + edit: Chỉnh sửa %{account} + form: + annual_fee: Phí thường niên + annual_fee_placeholder: '99' + apr: Lãi suất APR + apr_placeholder: '15.99' + available_credit: Hạn mức tín dụng còn lại + available_credit_placeholder: '10000' + expiration_date: Ngày hết hạn + minimum_payment: Thanh toán tối thiểu + minimum_payment_placeholder: '100' + new: + title: Nhập thông tin thẻ tín dụng + overview: + amount_owed: Số tiền nợ + annual_fee: Phí thường niên + apr: Lãi suất APR + available_credit: Hạn mức tín dụng còn lại + edit_account_details: Chỉnh sửa thông tin tài khoản + expiration_date: Ngày hết hạn + minimum_payment: Thanh toán tối thiểu + unknown: Không xác định diff --git a/config/locales/views/cryptos/vi.yml b/config/locales/views/cryptos/vi.yml new file mode 100644 index 000000000..ddc345939 --- /dev/null +++ b/config/locales/views/cryptos/vi.yml @@ -0,0 +1,20 @@ +--- +vi: + cryptos: + edit: + edit: Chỉnh sửa %{account} + form: + subtype_label: Loại tài khoản + subtype_prompt: Chọn loại tài khoản + subtype_none: Không có + tax_treatment_label: Chế độ thuế + tax_treatment_hint: Hầu hết tiền mã hóa được nắm giữ trong các tài khoản chịu thuế. Chọn một tùy chọn khác nếu được nắm giữ trong tài khoản có lợi thế về thuế. + new: + title: Nhập số dư tài khoản + subtypes: + wallet: + short: Ví + long: Ví tiền mã hóa + exchange: + short: Sàn giao dịch + long: Sàn giao dịch tiền mã hóa diff --git a/config/locales/views/depositories/vi.yml b/config/locales/views/depositories/vi.yml new file mode 100644 index 000000000..ef89650a2 --- /dev/null +++ b/config/locales/views/depositories/vi.yml @@ -0,0 +1,26 @@ +--- +vi: + depositories: + edit: + edit: Chỉnh sửa %{account} + form: + none: Không có + subtype_prompt: Chọn loại tài khoản + new: + title: Nhập số dư tài khoản + subtypes: + cd: + long: Chứng chỉ tiền gửi + short: CD + checking: + long: Tài khoản thanh toán + short: Thanh toán + hsa: + long: Tài khoản tiết kiệm y tế + short: HSA + money_market: + long: Thị trường tiền tệ + short: MM + savings: + long: Tài khoản tiết kiệm + short: Tiết kiệm diff --git a/config/locales/views/email_confirmation_mailer/vi.yml b/config/locales/views/email_confirmation_mailer/vi.yml new file mode 100644 index 000000000..e7c042401 --- /dev/null +++ b/config/locales/views/email_confirmation_mailer/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + email_confirmation_mailer: + confirmation_email: + body: Bạn vừa yêu cầu thay đổi địa chỉ email. Nhấp vào nút bên dưới để xác nhận thay đổi này. + cta: Xác nhận thay đổi email + expiry_notice: Liên kết này sẽ hết hạn sau %{hours} giờ. + greeting: Xin chào! + subject: '%{product_name}: Xác nhận thay đổi email của bạn' diff --git a/config/locales/views/enable_banking_items/vi.yml b/config/locales/views/enable_banking_items/vi.yml new file mode 100644 index 000000000..138ba872d --- /dev/null +++ b/config/locales/views/enable_banking_items/vi.yml @@ -0,0 +1,116 @@ +--- +vi: + enable_banking_items: + errors: + api_error: "Đã xảy ra lỗi giao tiếp với ngân hàng." + network_unreachable: "Dịch vụ ngân hàng tạm thời không khả dụng. Vui lòng thử lại sau." + session_invalid: "Phiên đã hết hạn. Vui lòng kết nối lại ngân hàng của bạn." + unexpected: "Đã xảy ra lỗi không mong muốn trong quá trình đồng bộ." + authorize: + authorization_failed: "Không thể khởi tạo ủy quyền: %{message}" + bank_required: Vui lòng chọn ngân hàng. + decoupled_not_supported: Ngân hàng này sử dụng phương thức xác thực thiết bị riêng biệt chưa được hỗ trợ. Vui lòng thêm tài khoản này thủ công. + invalid_redirect: URL ủy quyền nhận được không hợp lệ. Vui lòng thử lại. + redirect_uri_not_allowed: Chuyển hướng không được phép. Vui lòng cấu hình `%{callback_url}` trong cài đặt ứng dụng Enable Banking của bạn. + unexpected_error: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại. + callback: + authorization_error: Ủy quyền thất bại + invalid_callback: Tham số callback không hợp lệ. + item_not_found: Không tìm thấy kết nối. + session_failed: Không thể hoàn tất ủy quyền + success: Đã kết nối thành công với ngân hàng của bạn. Các tài khoản đang được đồng bộ. + unexpected_error: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại. + complete_account_setup: + all_skipped: Tất cả tài khoản đã bị bỏ qua. Bạn có thể thiết lập sau trên trang tài khoản. + no_accounts: Không có tài khoản nào để thiết lập. + success: Đã tạo thành công %{count} tài khoản! + create: + success: Cấu hình Enable Banking thành công. + destroy: + success: Kết nối Enable Banking đã được đưa vào hàng đợi xóa. + link_accounts: + already_linked: Các tài khoản đã chọn đã được liên kết. + link_failed: Liên kết tài khoản thất bại + no_accounts_selected: Chưa chọn tài khoản nào. + no_session: Không có kết nối Enable Banking nào đang hoạt động. Vui lòng kết nối với ngân hàng trước. + success: Đã liên kết thành công %{count} tài khoản. + link_existing_account: + success: Tài khoản đã được liên kết thành công với Enable Banking + errors: + only_manual: Chỉ tài khoản thủ công mới có thể được liên kết + invalid_enable_banking_account: Tài khoản Enable Banking được chọn không hợp lệ + enable_banking_item: + deletion_in_progress: Đang xóa + provider_name: Enable Banking + syncing: Đang đồng bộ... + reconnect: Kết nối lại + last_synced: Đồng bộ lần cuối %{time} trước + never_synced: Chưa bao giờ đồng bộ + update: Cập nhật + delete: Xóa + setup_needed: Cần thiết lập + setup_needed_description: + one: 1 tài khoản được nhập từ Enable Banking cần thiết lập + other: "%{count} tài khoản được nhập từ Enable Banking cần thiết lập" + set_up_accounts: Thiết lập tài khoản + no_accounts_found: Không tìm thấy tài khoản + no_accounts_found_description: Không tìm thấy tài khoản từ Enable Banking. Hãy thử đồng bộ lại. + select_existing_account: + title: Liên kết tài khoản Enable Banking + all_linked: Tất cả tài khoản Enable Banking có vẻ đã được liên kết. + try_after_sync: Nếu bạn vừa kết nối hoặc đồng bộ, hãy thử lại sau khi hoàn tất. + unlink_to_move: Để liên kết tài khoản khác, trước tiên hãy hủy liên kết từ menu thao tác của tài khoản. + balance: Số dư + link: Liên kết + cancel: Hủy + setup_accounts: + title: Thiết lập tài khoản Enable Banking của bạn + header_subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Enable Banking:" + historical_data_range: "Phạm vi dữ liệu lịch sử:" + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + sync_start_date_help: Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ. Tối đa 2 năm lịch sử có sẵn. + account_type_label: "Loại tài khoản:" + balance: Số dư + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + cancel: Hủy + new: + link_enable_banking_title: Liên kết Enable Banking + session_expired: Phiên hết hạn - cần ủy quyền lại + connected_bank: Ngân hàng đã kết nối + session_expires: "Phiên hết hạn" + unknown: Không rõ + connection: Kết nối + configured: Đã cấu hình + ready_to_connect: Sẵn sàng kết nối ngân hàng + sync: Đồng bộ + reconnect: Kết nối lại + connect_bank: Kết nối ngân hàng + remove_confirm: Bạn có chắc chắn muốn xóa kết nối này không? + remove: Xóa + add_connection: Thêm kết nối + not_configured: Kết nối Enable Banking chưa được cấu hình + not_configured_description: Trước khi liên kết tài khoản Enable Banking, bạn cần cấu hình kết nối Enable Banking. + setup_steps_title: "Các bước thiết lập:" + setup_step_1_html: "Đi đến Cài đặt → Nhà cung cấp" + setup_step_2_html: "Tìm phần Enable Banking" + setup_step_3: Nhập thông tin xác thực Enable Banking của bạn + setup_step_4: Quay lại đây để liên kết tài khoản + go_to_provider_settings: Đi đến Cài đặt nhà cung cấp + reauthorize: + invalid_redirect: URL ủy quyền nhận được không hợp lệ. Vui lòng thử lại. + reauthorization_failed: Ủy quyền lại thất bại + select_bank: + beta_label: Beta + cancel: Hủy + check_country: Vui lòng kiểm tra cài đặt mã quốc gia của bạn. + credentials_required: Vui lòng cấu hình thông tin xác thực Enable Banking trước. + description: Chọn ngân hàng bạn muốn kết nối với tài khoản của mình. + no_banks: Không có ngân hàng nào cho quốc gia/khu vực này. + no_search_results: Không có ngân hàng nào khớp với tìm kiếm của bạn. + search_label: Tìm kiếm ngân hàng của bạn + search_placeholder: Tìm kiếm ngân hàng của bạn... + title: Chọn ngân hàng của bạn + update: + success: Đã cập nhật cấu hình Enable Banking. diff --git a/config/locales/views/entries/vi.yml b/config/locales/views/entries/vi.yml new file mode 100644 index 000000000..6f8194302 --- /dev/null +++ b/config/locales/views/entries/vi.yml @@ -0,0 +1,23 @@ +--- +vi: + entries: + create: + success: Đã tạo mục nhập + destroy: + success: Đã xóa mục nhập + empty: + description: Thử thêm mục nhập, chỉnh bộ lọc hoặc tinh chỉnh tìm kiếm + title: Không tìm thấy mục nhập + loading: + loading: Đang tải mục nhập... + update: + success: Đã cập nhật mục nhập + unlock: + success: Đã mở khóa mục nhập. Có thể được cập nhật lần đồng bộ tiếp theo. + protection: + tooltip: Được bảo vệ khỏi đồng bộ + title: Được bảo vệ khỏi đồng bộ + description: Các chỉnh sửa của bạn với mục nhập này sẽ không bị ghi đè khi đồng bộ từ nhà cung cấp. + locked_fields_label: "Các trường bị khóa:" + unlock_button: Cho phép đồng bộ cập nhật + unlock_confirm: Cho phép đồng bộ cập nhật mục nhập này? Các thay đổi của bạn có thể bị ghi đè lần đồng bộ tiếp theo. diff --git a/config/locales/views/family_exports/vi.yml b/config/locales/views/family_exports/vi.yml new file mode 100644 index 000000000..e2102acf1 --- /dev/null +++ b/config/locales/views/family_exports/vi.yml @@ -0,0 +1,43 @@ +--- +vi: + family_exports: + access_denied: Truy cập bị từ chối + create: + success: Xuất dữ liệu đã bắt đầu. Bạn sẽ có thể tải xuống trong thời gian ngắn. + delete_confirmation: Bạn có chắc chắn muốn xóa bản xuất này không? Hành động này không thể hoàn tác. + delete_failed_confirmation: Bạn có chắc chắn muốn xóa bản xuất thất bại này không? + destroy: + success: Bản xuất đã được xóa thành công + export_not_ready: Bản xuất chưa sẵn sàng để tải xuống + exporting: Đang xuất dữ liệu... + new: + dialog_title: Xuất dữ liệu của bạn + dialog_subtitle: Tải xuống tất cả dữ liệu tài chính của bạn + whats_included: "Bao gồm:" + accounts_and_balances: Tất cả tài khoản và số dư + transaction_history: Lịch sử giao dịch + investment_trades: Giao dịch đầu tư + categories_tags_rules: Danh mục, nhãn và quy tắc + note_label: Lưu ý + note_description: Bản xuất này bao gồm tất cả dữ liệu của bạn, nhưng chỉ một phần dữ liệu có thể được nhập lại thông qua tính năng nhập CSV. Chúng tôi hỗ trợ nhập tài khoản, giao dịch (với danh mục và nhãn) và giao dịch mua bán. Dữ liệu tài khoản khác không thể nhập và chỉ dùng để lưu trữ hồ sơ của bạn. + cancel: Hủy + export_data: Xuất dữ liệu + index: + title: Xuất dữ liệu + new: Xuất mới + table: + title: Xuất dữ liệu + header: + date: Ngày + filename: Tên tệp + status: Trạng thái + actions: Hành động + row: + status: + in_progress: Đang xử lý + complete: Hoàn tất + failed: Thất bại + actions: + delete: Xóa + download: Tải xuống + empty: Chưa có bản xuất nào. diff --git a/config/locales/views/holdings/vi.yml b/config/locales/views/holdings/vi.yml new file mode 100644 index 000000000..216836479 --- /dev/null +++ b/config/locales/views/holdings/vi.yml @@ -0,0 +1,101 @@ +--- +vi: + holdings: + cash: + brokerage_cash: Tiền mặt môi giới + destroy: + success: Đã xóa danh mục nắm giữ + cannot_delete: Bạn không thể xóa danh mục nắm giữ này + update: + success: Đã lưu giá vốn. + error: Giá trị giá vốn không hợp lệ. + unlock_cost_basis: + success: Đã mở khóa giá vốn. Có thể được cập nhật lần đồng bộ tiếp theo. + remap_security: + success: Đã cập nhật chứng khoán thành công. + security_not_found: Không tìm thấy chứng khoán đã chọn. + reset_security: + success: Chứng khoán đã được đặt lại về giá trị từ nhà cung cấp. + sync_prices: + success: Đã đồng bộ dữ liệu thị trường thành công. + unavailable: Đồng bộ dữ liệu thị trường không khả dụng cho chứng khoán ngoại tuyến. + provider_error: Không thể tải giá mới nhất. Vui lòng thử lại sau vài phút. + errors: + security_collision: "Không thể ánh xạ lại: bạn đã có danh mục nắm giữ cho %{ticker} vào ngày %{date}." + cost_basis_sources: + manual: Người dùng đặt + calculated: Từ giao dịch + provider: Từ nhà cung cấp + cost_basis_cell: + unknown: "--" + set: Đặt + set_cost_basis_header: "Đặt giá vốn cho %{ticker} (%{qty} cổ phiếu)" + total_cost_basis_label: Tổng giá vốn + or_per_share_label: "Hoặc nhập mỗi cổ phiếu:" + per_share: mỗi cổ phiếu + cancel: Hủy + save: Lưu + overwrite_confirm_title: Ghi đè giá vốn? + overwrite_confirm_body: "Thao tác này sẽ thay thế giá vốn hiện tại là %{current}." + holding: + per_share: mỗi cổ phiếu + shares: "%{qty} cổ phiếu" + unknown: "--" + no_cost_basis: Không có giá vốn + index: + average_cost: Giá trung bình + holdings: Danh mục nắm giữ + name: Tên + new_holding: Hoạt động mới + no_holdings: Không có danh mục nắm giữ. + return: Tổng lợi nhuận + weight: Tỷ trọng + missing_price_tooltip: + description: Khoản đầu tư này có giá trị bị thiếu và chúng tôi không thể tính lợi nhuận hoặc giá trị. + missing_data: Thiếu dữ liệu + show: + avg_cost_label: Giá trung bình + current_market_price_label: Giá thị trường hiện tại + delete: Xóa + delete_subtitle: Thao tác này sẽ xóa danh mục nắm giữ và tất cả giao dịch liên quan trong tài khoản này. Không thể hoàn tác. + delete_title: Xóa danh mục nắm giữ + edit_security: Chỉnh sửa chứng khoán + history: Lịch sử + no_trade_history: Không có lịch sử giao dịch cho danh mục nắm giữ này. + overview: Tổng quan + portfolio_weight_label: Tỷ trọng danh mục + settings: Cài đặt + security_label: Chứng khoán + originally: "là %{ticker}" + search_security: Tìm kiếm chứng khoán + search_security_placeholder: Tìm theo mã ticker hoặc tên + cancel: Hủy + remap_security: Lưu + provider_disabled_warning: "Cập nhật giá tạm dừng — nhà cung cấp %{provider} đã bị tắt. Chuyển sang nhà cung cấp khác bên dưới hoặc bật lại trong Cài đặt." + truncated_history_warning: "Lịch sử giá chỉ khả dụng từ %{date} trở đi. Các ngày trước đó không có dữ liệu từ nhà cung cấp đã chọn." + switch_provider_label: Chuyển nhà cung cấp + switch_provider_description: "%{provider} đã bị tắt. Tìm kiếm chứng khoán này từ nhà cung cấp khác đã bật." + switch_provider_button: Chuyển + no_security_provider: Chưa cấu hình nhà cung cấp chứng khoán. Không thể tìm kiếm chứng khoán. + security_remapped_label: Chứng khoán đã được ánh xạ lại + provider_sent: "Nhà cung cấp gửi: %{ticker}" + reset_to_provider: Đặt lại về nhà cung cấp + reset_confirm_title: Đặt lại chứng khoán về nhà cung cấp? + reset_confirm_body: "Thao tác này sẽ thay đổi chứng khoán từ %{current} về %{original} và chuyển tất cả giao dịch liên quan." + ticker_label: Mã ticker + trade_history_entry: "%{qty} cổ phiếu %{security} ở mức %{price}" + total_return_label: Tổng lợi nhuận + unknown: Không xác định + cost_basis_locked_label: Giá vốn đã bị khóa + cost_basis_locked_description: Giá vốn bạn đặt thủ công sẽ không bị thay đổi khi đồng bộ. + unlock_cost_basis: Mở khóa + unlock_confirm_title: Mở khóa giá vốn? + unlock_confirm_body: Thao tác này sẽ cho phép giá vốn được cập nhật bởi đồng bộ nhà cung cấp hoặc tính toán giao dịch. + shares_label: Cổ phiếu + book_value_label: Giá trị sổ sách + market_value_label: Giá trị thị trường + market_data_label: Dữ liệu thị trường + market_data_sync_button: Làm mới + last_price_update: Cập nhật giá lần cuối + syncing: Đang đồng bộ... + never: Chưa bao giờ diff --git a/config/locales/views/ibkr_items/vi.yml b/config/locales/views/ibkr_items/vi.yml new file mode 100644 index 000000000..2bb59f9a5 --- /dev/null +++ b/config/locales/views/ibkr_items/vi.yml @@ -0,0 +1,92 @@ +--- +vi: + providers: + ibkr: + name: Interactive Brokers + connection_description: Kết nối báo cáo Flex Web Service của Interactive Brokers + institution_name: Interactive Brokers + ibkr_items: + defaults: + name: Interactive Brokers + ibkr_item: + deletion_in_progress: Đang xóa + flex_web_service: Flex Web Service + syncing: Đang đồng bộ + requires_update: Thông tin xác thực cần chú ý + error: Lỗi + synced: Đã đồng bộ %{time} trước. %{summary}. + never_synced: Chưa bao giờ đồng bộ. + setup_accounts: Thiết lập tài khoản + delete: Xóa + accounts_need_setup: Tài khoản cần thiết lập + accounts_need_setup_description: Một số tài khoản từ IBKR cần được liên kết với tài khoản Sure. + no_accounts_discovered: Chưa phát hiện tài khoản IBKR nào. + no_accounts_discovered_description: Chạy đồng bộ sau khi cấu hình truy vấn Flex để phát hiện tài khoản. + setup_accounts: + page_title: Thiết lập tài khoản Interactive Brokers + dialog_title: Thiết lập tài khoản Interactive Brokers của bạn + subtitle: Chọn tài khoản brokerage IBKR để liên kết. + info_box: + title: Nhập Flex Query IBKR + items: + item_1: Tài sản nắm giữ với giá hiện tại và số lượng + item_2: Cơ sở chi phí theo vị thế + item_3: Giao dịch, cổ tức, hoa hồng và tiền gửi hoặc rút tiền + warning: Hoạt động lịch sử bị giới hạn trong khoảng thời gian báo cáo của Flex Query + status: + fetching_accounts: Đang lấy tài khoản từ Interactive Brokers... + no_accounts_found_title: Không tìm thấy tài khoản. + no_accounts_found_description: Sure không thể tìm thấy tài khoản IBKR nào trong báo cáo Flex mới nhất. + available_accounts: + title: Tài khoản có sẵn + account_type_investment: Đầu tư + account_summary: "%{account_type} • Số dư: %{balance}" + account_id: "Mã tài khoản: %{account_id}" + link_existing: + description: Hoặc liên kết tài khoản IBKR đã phát hiện với tài khoản đầu tư thủ công hiện có. + manual_account_option: "%{name} (%{balance})" + select_prompt: Chọn một tài khoản... + linked_accounts: + title: Đã liên kết + linked_to_html: "Liên kết với: %{account}" + buttons: + refresh: Làm mới + cancel: Hủy + back_to_settings: Quay lại Cài đặt + create_selected_accounts: Tạo tài khoản đã chọn + link: Liên kết + done: Xong + sync_status: + no_accounts: Chưa phát hiện tài khoản IBKR nào + all_linked: + one: 1 tài khoản đã liên kết + other: "%{count} tài khoản đã liên kết" + partial: "%{linked} đã liên kết, %{unlinked} cần thiết lập" + select_existing_account: + title: Liên kết tài khoản Interactive Brokers + no_accounts_available: Chưa có tài khoản Interactive Brokers chưa được liên kết. + run_sync_hint: "Chạy đồng bộ từ Cài đặt > Nhà cung cấp sau khi cập nhật truy vấn Flex." + wait_for_sync: Chờ quá trình đồng bộ phát hiện tài khoản hoàn tất. + balance: Số dư + link: Liên kết + cancel: Hủy + create: + success: Đã cấu hình Interactive Brokers thành công. + update: + success: Đã cập nhật cấu hình Interactive Brokers thành công. + destroy: + success: Đã lên lịch xóa kết nối Interactive Brokers. + select_accounts: + not_configured: Interactive Brokers chưa được cấu hình. + link_existing_account: + not_found: Không tìm thấy tài khoản hoặc cấu hình Interactive Brokers. + only_manual_investment: Chỉ tài khoản đầu tư thủ công mới có thể liên kết với Interactive Brokers. + already_linked: Tài khoản Interactive Brokers này đã được liên kết. + success: Đã liên kết thành công với tài khoản Interactive Brokers. + failed: Liên kết tài khoản Interactive Brokers thất bại. + complete_account_setup: + success: + one: Đã tạo thành công %{count} tài khoản Interactive Brokers. + other: Đã tạo thành công %{count} tài khoản Interactive Brokers. + none_selected: Không có tài khoản nào được chọn. + none_created: Không có tài khoản nào được tạo. diff --git a/config/locales/views/impersonation_sessions/vi.yml b/config/locales/views/impersonation_sessions/vi.yml new file mode 100644 index 000000000..a47890da8 --- /dev/null +++ b/config/locales/views/impersonation_sessions/vi.yml @@ -0,0 +1,25 @@ +--- +vi: + impersonation_sessions: + approve: + success: Yêu cầu đã được chấp thuận + complete: + success: Phiên đã hoàn tất + create: + success: Yêu cầu đã được gửi đến người dùng. Đang chờ chấp thuận. + join: + success: Đã tham gia phiên + leave: + success: Đã rời phiên + reject: + success: Yêu cầu đã bị từ chối + super_admin_bar: + super_admin: Quản trị viên cấp cao + jobs: Công việc + impersonating: Đang mạo danh + leave: Rời + terminate: Kết thúc + join_a_session: Tham gia phiên + join: Tham gia + uuid_placeholder: UUID + request_impersonation: Yêu cầu mạo danh diff --git a/config/locales/views/imports/vi.yml b/config/locales/views/imports/vi.yml new file mode 100644 index 000000000..1943a9334 --- /dev/null +++ b/config/locales/views/imports/vi.yml @@ -0,0 +1,436 @@ +--- +vi: + import: + qif_category_selections: + update: + success: "Đã lưu danh mục và nhãn." + show: + title: "Cấu hình & chọn" + description: "Xem lại định dạng ngày được phát hiện, sau đó chọn danh mục và nhãn từ tệp QIF để đưa vào %{product_name}." + categories_heading: Danh mục + categories_found: + one: "Tìm thấy 1 danh mục" + other: "Tìm thấy %{count} danh mục" + category_name_col: Tên danh mục + transactions_col: Giao dịch + tags_heading: Nhãn + tags_found: + one: "Tìm thấy 1 nhãn" + other: "Tìm thấy %{count} nhãn" + tag_name_col: Tên nhãn + txn_count: + one: "1 giao dịch" + other: "%{count} giao dịch" + split_warning_title: Phát hiện giao dịch phân chia + split_warning_description: "Tệp QIF này chứa giao dịch phân chia. Phân chia chưa được hỗ trợ, mỗi giao dịch phân chia sẽ được nhập như một giao dịch đơn với toàn bộ số tiền và không có danh mục." + split_badge: phân chia + empty_state_primary: Không tìm thấy danh mục hoặc nhãn nào trong tệp QIF này. + empty_state_secondary: Tất cả giao dịch sẽ được nhập mà không có danh mục hoặc nhãn. + submit: Tiếp tục xem xét + cleans: + show: + not_configured: "Vui lòng cấu hình nhập dữ liệu trước khi tiếp tục." + description: Chỉnh sửa dữ liệu trong bảng bên dưới. Ô đỏ là không hợp lệ. + errors_notice: Dữ liệu của bạn có lỗi. Di chuột qua lỗi để xem chi tiết. + errors_notice_mobile: Dữ liệu của bạn có lỗi. Nhấn vào tooltip lỗi để xem chi tiết. + title: Làm sạch dữ liệu + data_cleaned: Dữ liệu của bạn đã được làm sạch + next_step: Bước tiếp theo + all_rows: Tất cả hàng + error_rows: Hàng lỗi + configurations: + update: + success: Đã cấu hình nhập dữ liệu thành công. + account_import: + leave_empty: Để trống + default: Mặc định + entity_type: Loại thực thể + name: Tên + balance: Số dư + currency: Tiền tệ + balance_date: Ngày số dư + date_format: Định dạng ngày + select_format: Chọn định dạng + apply_configuration: Áp dụng cấu hình + transaction_import: + date_label: Ngày + select_column: Chọn cột + select_format: Chọn định dạng + amount_label: Số tiền + default: Mặc định + currency_label: Tiền tệ + format_label: Định dạng + amount_type_strategy_label: Chiến lược loại số tiền + select_strategy: Chọn chiến lược + set: Đặt + as_amount_type_column: là cột loại số tiền + select_value: Chọn giá trị + as_identifier_value: là giá trị định danh + treat_as_html: "Xem \"%{value}\" là" + income_inflow: Thu nhập (dòng vào) + expense_outflow: Chi tiêu (dòng ra) + select_type: Chọn loại + leave_empty: Để trống + account_label: Tài khoản + name_label: Tên + category_label: Danh mục + tags_label: Nhãn + notes_label: Ghi chú + apply_configuration: Áp dụng cấu hình + incomes_are_positive: Thu nhập là số dương + incomes_are_negative: Thu nhập là số âm + amount_type_label: Loại số tiền + select_convention: Chọn quy ước + date_format_label: Định dạng ngày + rows_to_skip_label: Bỏ qua n hàng đầu + trade_import: + select_column: Chọn cột + date_label: Ngày + quantity_label: Số lượng + buys_are_positive: Mua là số lượng dương + buys_are_negative: Mua là số lượng âm + default: Mặc định + currency_label: Tiền tệ + format_label: Định dạng + select_format: Chọn định dạng + ticker_label: Mã ticker + leave_empty: Để trống + stock_exchange_code_label: Mã sàn giao dịch + price_label: Giá + account_label: Tài khoản + name_label: Tên + note_label: Ghi chú + no_security_provider_warning: Nhà cung cấp giá chứng khoán chưa được cấu hình. Nhập giao dịch sẽ hoạt động, nhưng Sure sẽ không bổ sung lịch sử giá. Vui lòng vào cài đặt để cấu hình. + date_format_label: Định dạng ngày + apply_configuration: Áp dụng cấu hình + category_import: + button_label: Tiếp tục + description: Tải lên tệp CSV đơn giản (như tệp chúng tôi tạo khi bạn xuất dữ liệu). Chúng tôi sẽ tự động ánh xạ các cột cho bạn. + instructions: Chọn tiếp tục để phân tích CSV và chuyển sang bước làm sạch. + mint_import: + date_format_label: Định dạng ngày + actual_import: + preconfigured_notice: Chúng tôi đã cấu hình sẵn nhập Actual Budget cho bạn. Vui lòng tiến hành bước tiếp theo. + leave_empty: Để trống + date_label: Ngày + date_format_label: Định dạng ngày + amount_label: Số tiền + signage_convention_label: Quy ước dấu + incomes_are_negative: Thu nhập là số âm + incomes_are_positive: Thu nhập là số dương + account_label: Tài khoản (tùy chọn) + name_label: Người trả (tùy chọn) + category_label: Danh mục (tùy chọn) + notes_label: Ghi chú (tùy chọn) + apply_configuration: Áp dụng cấu hình + rule_import: + description: Cấu hình nhập quy tắc. Các quy tắc sẽ được tạo hoặc cập nhật dựa trên dữ liệu CSV. + process_button: Xử lý quy tắc + process_help: Nhấn nút bên dưới để xử lý CSV và tạo các hàng quy tắc. + show: + description: Chọn các cột tương ứng với từng trường trong CSV. + title: Cấu hình nhập dữ liệu + confirms: + sure_import: + title: Xác nhận nhập dữ liệu + description: Xem lại dữ liệu sẽ được nhập từ tệp xuất. + summary: Tóm tắt nhập dữ liệu + empty_summary: Chúng tôi không tìm thấy bản ghi nào có thể nhập trong tệp này. Tệp có thể trống hoặc các dòng không khớp định dạng xuất mong đợi. + publish_button: Bắt đầu nhập + cancel: Hủy + mappings: + create_account: Tạo tài khoản + csv_mapping_label: "%{mapping} trong CSV" + sure_mapping_label: "%{mapping} trong %{product_name}" + no_accounts: Bạn chưa có tài khoản nào. Vui lòng tạo tài khoản để sử dụng cho các hàng (chưa gán) trong CSV hoặc quay lại bước Làm sạch và cung cấp tên tài khoản. + rows_label: Hàng + unassigned_account: Cần tạo tài khoản mới cho các hàng chưa gán? + next: Tiếp theo + show: + invalid_data: "Dữ liệu không hợp lệ, vui lòng chỉnh sửa cho đến khi tất cả lỗi được giải quyết" + account_mapping_description: Gán tất cả tài khoản từ tệp nhập vào các tài khoản hiện có của %{product_name}. Bạn cũng có thể thêm tài khoản mới hoặc để chưa phân loại. + account_mapping_title: Gán tài khoản + account_type_mapping_description: Gán tất cả loại tài khoản từ tệp nhập vào %{product_name} + account_type_mapping_title: Gán loại tài khoản + category_mapping_description: Gán tất cả danh mục từ tệp nhập vào các danh mục hiện có của %{product_name}. Bạn cũng có thể thêm danh mục mới hoặc để chưa phân loại. + category_mapping_title: Gán danh mục + tag_mapping_description: Gán tất cả nhãn từ tệp nhập vào các nhãn hiện có của %{product_name}. Bạn cũng có thể thêm nhãn mới hoặc để chưa phân loại. + tag_mapping_title: Gán nhãn + uploads: + update: + qif_uploaded: "Tệp QIF đã được tải lên thành công." + show: + csv_invalid: "Phải là CSV hợp lệ có tiêu đề và ít nhất một hàng dữ liệu" + drop_csv_title: Thả CSV để tải lên + drop_csv_subtitle: Tệp của bạn sẽ được tải lên tự động + upload_csv_tab: Tải CSV lên + copy_paste_tab: Sao chép & Dán + account_optional_label: Tài khoản (tùy chọn) + multi_account_import: Nhập nhiều tài khoản + upload_csv_button: Tải CSV lên + paste_csv_placeholder: Dán nội dung tệp CSV của bạn tại đây + download_sample_csv: Tải xuống CSV mẫu + to_see_format: để xem định dạng CSV yêu cầu + qif_title: Tải tệp QIF lên + qif_description: Chọn tài khoản mà tệp QIF này thuộc về, rồi tải lên tệp xuất .qif từ Quicken. + qif_account_label: Tài khoản + qif_account_placeholder: Chọn tài khoản… + qif_file_prompt: để thêm tệp QIF tại đây + qif_file_hint: Chỉ tệp .qif + qif_submit: Tải QIF lên + browse: Duyệt + csv_file_prompt: để thêm tệp CSV tại đây + description: Dán hoặc tải lên tệp CSV bên dưới. Vui lòng xem hướng dẫn trong bảng bên dưới trước khi bắt đầu. + instructions_1: Bên dưới là CSV mẫu với các cột có thể nhập. + instructions_2: CSV của bạn phải có hàng tiêu đề + instructions_3: Bạn có thể đặt tên cột tùy ý. Bạn sẽ ánh xạ chúng ở bước sau. + instructions_4: Các cột được đánh dấu dấu hoa thị (*) là dữ liệu bắt buộc. + instructions_5: Không có dấu phẩy, ký hiệu tiền tệ và dấu ngoặc đơn trong số. + title: Nhập dữ liệu + sure_import: + title: Nhập từ xuất + description: Tải lên tệp all.ndjson từ xuất dữ liệu để khôi phục tài khoản, giao dịch, danh mục và nhiều hơn nữa. + drop_title: Thả NDJSON để tải lên + drop_subtitle: Tệp của bạn sẽ được tải lên tự động + browse: Duyệt + browse_hint: để thêm tệp all.ndjson tại đây + upload_button: Tải NDJSON lên + hint_html: Tải lên tệp all.ndjson từ tệp ZIP xuất dữ liệu + ndjson_invalid: Phải là NDJSON hợp lệ với ít nhất một bản ghi + imports: + mapping_labels: + account_type: "Loại tài khoản" + account: "Tài khoản" + category: "Danh mục" + tag: "Nhãn" + dry_run_resources: + transactions: "Giao dịch" + balances: "Số dư" + accounts: "Tài khoản" + categories: "Danh mục" + tags: "Nhãn" + rules: "Quy tắc" + merchants: "Nhà cung cấp" + recurring_transactions: "Giao dịch định kỳ" + transfers: "Chuyển khoản" + rejected_transfers: "Chuyển khoản bị từ chối" + trades: "Giao dịch chứng khoán" + holdings: "Danh mục nắm giữ" + valuations: "Định giá" + budgets: "Ngân sách" + budget_categories: "Danh mục ngân sách" + column_labels: + date: "Ngày" + amount: "Số tiền" + name: "Tên" + currency: "Tiền tệ" + category: "Danh mục" + tags: "Nhãn" + account: "Tài khoản" + notes: "Ghi chú" + qty: "Số lượng" + ticker: "Mã ticker" + exchange: "Sàn giao dịch" + price: "Giá" + entity_type: "Loại" + category_parent: "Danh mục cha" + category_color: "Màu sắc" + category_icon: "Biểu tượng Lucide" + update: + account_saved: "Đã lưu tài khoản." + invalid_account: "Không tìm thấy tài khoản." + publish: + started: "Quá trình nhập đã bắt đầu trong nền." + max_rows_exceeded: "Tệp nhập vượt quá số hàng tối đa là %{max}." + revert: + started: "Đang hoàn tác nhập dữ liệu trong nền." + apply_template: + template_applied: "Đã áp dụng mẫu." + no_template_found: "Không tìm thấy mẫu, vui lòng cấu hình nhập thủ công." + destroy: + deleted: "Đã xóa nhập dữ liệu." + failure: + title: Nhập thất bại + description: Vui lòng kiểm tra định dạng tệp, các lỗi và đảm bảo tất cả trường bắt buộc được điền, rồi thử lại. + try_again: Thử lại + success: + title: Nhập thành công + description: Dữ liệu đã được thêm thành công vào ứng dụng và sẵn sàng sử dụng. + back_to_dashboard: Quay lại bảng điều khiển + verification: + title: Xác minh đọc lại + checked: Đã kiểm tra + mismatches: Không khớp + status: + not_verified: Chưa xác minh + matched: Khớp + mismatch: Không khớp + failed: Thất bại + reverted: Đã hoàn tác + importing: + title: Đang nhập dữ liệu + description: "Nhập dữ liệu đang được thực hiện. Kiểm tra menu nhập để biết cập nhật hoặc nhấn 'Kiểm tra trạng thái' để làm mới. Bạn có thể tiếp tục sử dụng ứng dụng." + check_status: Kiểm tra trạng thái + back_to_dashboard: Quay lại bảng điều khiển + revert_failure: + title: Hoàn tác nhập thất bại + description: Vui lòng thử lại + try_again: Thử lại + date_format: + heading: Định dạng ngày + description: "Định dạng ngày đã được tự động phát hiện từ tệp. Thay đổi nếu ngày hiển thị không đúng." + preview: "Ngày được phân tích đầu tiên" + error_title: "Không thể phát hiện định dạng ngày" + error_description: "Không có định dạng ngày được hỗ trợ nào có thể phân tích các ngày trong tệp này. Vui lòng kiểm tra tệp có chứa ngày hợp lệ." + type_labels: + transaction_import: "Nhập giao dịch" + trade_import: "Nhập giao dịch chứng khoán" + account_import: "Nhập tài khoản" + mint_import: "Nhập từ Mint" + actual_import: "Nhập từ Actual" + qif_import: "Nhập từ QIF" + category_import: "Nhập danh mục" + rule_import: "Nhập quy tắc" + pdf_import: "Nhập PDF" + document_import: "Nhập tài liệu" + sure_import: "Nhập từ Sure" + steps: + upload: Tải lên + configure: Cấu hình + clean: Làm sạch + map: Ánh xạ + confirm: Xác nhận + select: Chọn + progress: "Bước %{step} trong %{total}" + empty: + message: Không tìm thấy nhập dữ liệu. + index: + title: Nhập dữ liệu + new: Nhập mới + table: + title: Nhập dữ liệu + header: + date: Ngày + operation: Thao tác + status: Trạng thái + actions: Hành động + row: + type_labels: + transaction_import: "Giao dịch" + trade_import: "Giao dịch CK" + account_import: "Tài khoản" + mint_import: "Mint" + actual_import: "Actual" + qif_import: "QIF" + category_import: "Danh mục" + rule_import: "Quy tắc" + pdf_import: "PDF" + document_import: "Tài liệu" + sure_import: "Sure" + status: + in_progress: Đang xử lý + uploading: Đang xử lý hàng + reverting: Đang hoàn tác + revert_failed: Hoàn tác thất bại + complete: Hoàn thành + failed: Thất bại + actions: + revert: Hoàn tác + confirm_revert: Thao tác này sẽ xóa các giao dịch đã nhập, nhưng bạn vẫn có thể xem lại và nhập lại dữ liệu bất cứ lúc nào. + delete: Xóa + view: Xem + empty: Chưa có nhập dữ liệu. + new: + description: Nhập từ công cụ tài chính hoặc tải lên tệp dữ liệu thô. + tab_financial_tools: Công cụ tài chính & Tệp + tab_raw_data: Dữ liệu thô + coming_soon: Sắp ra mắt + import_ynab: Nhập từ YNAB + import_accounts: Nhập tài khoản + import_categories: Nhập danh mục + import_mint: Nhập từ Mint + import_actual: Nhập từ Actual Budget + import_portfolio: Nhập đầu tư + import_rules: Nhập quy tắc + import_transactions: Nhập giao dịch + import_qif: Nhập từ Quicken (QIF) + import_sure: Nhập từ Sure + import_sure_description: Tệp xuất .ndjson đầy đủ + import_file: Nhập tài liệu + import_file_description: Phân tích bằng AI cho PDF và tải lên tệp tìm kiếm được + requires_account: Nhập tài khoản trước để mở khóa tùy chọn này. + resume: Tiếp tục nhập %{type} + sources: Nguồn + title: Nhập mới + create: + file_too_large: Tệp quá lớn. Kích thước tối đa là %{max_size}MB. + invalid_file_type: Loại tệp không hợp lệ. Vui lòng tải lên tệp CSV. + csv_uploaded: Đã tải lên CSV thành công. + ndjson_uploaded: Đã tải lên tệp NDJSON thành công. + pdf_too_large: Tệp PDF quá lớn. Kích thước tối đa là %{max_size}MB. + pdf_processing: PDF của bạn đang được xử lý. Bạn sẽ nhận email khi phân tích hoàn tất. + invalid_pdf: Tệp đã tải lên không phải PDF hợp lệ. + document_too_large: Tệp tài liệu quá lớn. Kích thước tối đa là %{max_size}MB. + invalid_document_file_type: Loại tệp tài liệu không hợp lệ cho kho vector hiện tại. + document_uploaded: Đã tải lên tài liệu thành công. + document_upload_failed: Không thể tải tài liệu lên kho vector. Vui lòng thử lại. + invalid_ndjson_file_type: Loại hoặc định dạng tệp không hợp lệ. Vui lòng tải lên tệp xuất .ndjson hoặc .json hợp lệ. + document_provider_not_configured: Chưa cấu hình kho vector để tải tài liệu lên. + show: + finalize_upload: Vui lòng hoàn tất tải lên tệp. + finalize_mappings: Vui lòng hoàn tất ánh xạ trước khi tiếp tục. + ready: + description: Dưới đây là tóm tắt các mục mới sẽ được thêm vào tài khoản sau khi bạn xuất bản nhập này. + title: Xác nhận dữ liệu nhập + summary_item_label: Mục + summary_count_label: Số lượng + empty_summary: Chúng tôi không tìm thấy bản ghi nào có thể nhập trong tệp này. + publish_import: Xuất bản nhập + back_to_imports: Quay lại nhập dữ liệu + errors: + custom_column_requires_inflow: "Nhập cột tùy chỉnh yêu cầu phải chọn cột dòng vào" + document_types: + bank_statement: Sao kê ngân hàng + credit_card_statement: Sao kê thẻ tín dụng + investment_statement: Sao kê đầu tư + financial_document: Tài liệu tài chính + contract: Hợp đồng + other: Tài liệu khác + unknown: Tài liệu không xác định + pdf_import: + processing_title: Đang xử lý PDF + processing_description: Chúng tôi đang phân tích tài liệu bằng AI. Quá trình này có thể mất chút thời gian. Bạn sẽ nhận email khi phân tích hoàn tất. + check_status: Kiểm tra trạng thái + back_to_dashboard: Quay lại bảng điều khiển + failed_title: Xử lý thất bại + failed_description: Chúng tôi không thể xử lý tài liệu PDF. Vui lòng thử lại hoặc liên hệ hỗ trợ. + try_again: Thử lại + delete_import: Xóa nhập + complete_title: Tài liệu đã được phân tích + complete_description: Chúng tôi đã phân tích PDF và đây là kết quả. + document_type_label: Loại tài liệu + summary_label: Tóm tắt + email_sent_notice: Email đã được gửi đến bạn với các bước tiếp theo. + back_to_imports: Quay lại nhập dữ liệu + unknown_state_title: Trạng thái không xác định + unknown_state_description: Nhập này ở trạng thái không mong đợi. Vui lòng quay lại nhập dữ liệu. + processing_failed_with_message: "%{message}" + processing_failed_generic: "Xử lý thất bại: %{error}" + ready_for_review_title: Sẵn sàng xem xét + ready_for_review_description: "Chúng tôi đã trích xuất %{count} giao dịch từ sao kê. Xem xét và xuất bản để thêm vào tài khoản." + transactions_extracted: Giao dịch đã trích xuất + transactions_extracted_count: + one: "%{count} giao dịch" + other: "%{count} giao dịch" + select_account: Nhập vào tài khoản + select_account_placeholder: Chọn tài khoản... + select_account_hint: Chọn tài khoản để nhập các giao dịch này vào. + no_accounts: Chưa có tài khoản. Vui lòng tạo tài khoản trước. + create_account: Tạo tài khoản + save_account: Lưu + publish_transactions: + one: "Xuất bản %{count} giao dịch" + other: "Xuất bản %{count} giao dịch" + review_transactions: Xem xét giao dịch + select_account_to_continue: Vui lòng chọn tài khoản ở trên để tiếp tục. + unknown_document_type: Không xác định diff --git a/config/locales/views/indexa_capital_items/vi.yml b/config/locales/views/indexa_capital_items/vi.yml new file mode 100644 index 000000000..2e0ab47bb --- /dev/null +++ b/config/locales/views/indexa_capital_items/vi.yml @@ -0,0 +1,239 @@ +--- +vi: + indexa_capital_items: + sync_status: + no_accounts: "Không tìm thấy tài khoản" + synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + synced_with_setup: "%{linked} đã đồng bộ, %{unlinked} cần thiết lập" + institution_summary: + none: "Chưa kết nối tổ chức nào" + count: + one: "%{count} tổ chức" + other: "%{count} tổ chức" + errors: + provider_not_configured: "Nhà cung cấp Indexa Capital chưa được cấu hình" + + sync: + status: + importing: "Đang nhập tài khoản từ Indexa Capital..." + processing: "Đang xử lý tài sản nắm giữ và hoạt động..." + calculating: "Đang tính toán số dư..." + importing_data: "Đang nhập dữ liệu tài khoản..." + checking_setup: "Đang kiểm tra cấu hình tài khoản..." + needs_setup: "%{count} tài khoản cần thiết lập..." + success: "Đã bắt đầu đồng bộ" + + panel: + setup_instructions: "Hướng dẫn thiết lập:" + step_1: "Truy cập bảng điều khiển Indexa Capital để tạo mã thông báo API chỉ đọc" + step_2: "Dán mã thông báo API của bạn bên dưới và nhấn Lưu" + step_3: "Sau khi kết nối thành công, đi đến tab Tài khoản để thiết lập tài khoản mới" + field_descriptions: "Mô tả các trường:" + optional: "(Tùy chọn)" + required: "(bắt buộc)" + optional_with_default: "(tùy chọn, mặc định là %{default_value})" + alternative_auth: "Hoặc sử dụng xác thực tên đăng nhập/mật khẩu thay thế..." + save_button: "Lưu cấu hình" + update_button: "Cập nhật cấu hình" + fields: + api_token: + label: "Mã thông báo API" + description: "Mã thông báo API chỉ đọc từ bảng điều khiển Indexa Capital" + placeholder_new: "Dán mã thông báo API vào đây" + placeholder_update: "Nhập mã thông báo API mới để cập nhật" + username: + label: "Tên đăng nhập" + description: "Tên đăng nhập/email Indexa Capital của bạn" + placeholder_new: "Dán tên đăng nhập vào đây" + placeholder_update: "Nhập tên đăng nhập mới để cập nhật" + document: + label: "Mã tài liệu" + description: "Mã tài liệu/ID Indexa Capital của bạn" + placeholder_new: "Dán mã tài liệu vào đây" + placeholder_update: "Nhập mã tài liệu mới để cập nhật" + password: + label: "Mật khẩu" + description: "Mật khẩu Indexa Capital của bạn" + placeholder_new: "Dán mật khẩu vào đây" + placeholder_update: "Nhập mật khẩu mới để cập nhật" + + create: + success: "Kết nối Indexa Capital đã được tạo thành công" + update: + success: "Kết nối Indexa Capital đã được cập nhật" + destroy: + success: "Kết nối Indexa Capital đã được xóa" + index: + title: "Kết nối Indexa Capital" + + loading: + loading_message: "Đang tải tài khoản Indexa Capital..." + loading_title: "Đang tải" + + link_accounts: + all_already_linked: + one: "Tài khoản đã chọn (%{names}) đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết: %{names}" + api_error: "Lỗi API: %{message}" + invalid_account_names: + one: "Không thể liên kết tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + link_failed: "Liên kết tài khoản thất bại" + no_accounts_selected: "Vui lòng chọn ít nhất một tài khoản" + no_api_key: "Không tìm thấy thông tin xác thực Indexa Capital. Vui lòng cấu hình trong Cài đặt nhà cung cấp." + partial_invalid: "Đã liên kết thành công %{created_count} tài khoản, %{already_linked_count} đã được liên kết, %{invalid_count} tài khoản có tên không hợp lệ" + partial_success: "Đã liên kết thành công %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết: %{already_linked_names}" + success: + one: "Đã liên kết thành công %{count} tài khoản" + other: "Đã liên kết thành công %{count} tài khoản" + + indexa_capital_item: + accounts_need_setup: "Tài khoản cần thiết lập" + delete: "Xóa kết nối" + deletion_in_progress: "đang xóa..." + error: "Lỗi" + more_accounts_available: + one: "%{count} tài khoản khác có sẵn" + other: "%{count} tài khoản khác có sẵn" + no_accounts_description: "Kết nối này chưa có tài khoản nào được liên kết." + no_accounts_title: "Không có tài khoản" + provider_name: "Indexa Capital" + requires_update: "Kết nối cần cập nhật" + setup_action: "Thiết lập tài khoản mới" + setup_description: "%{linked} trong số %{total} tài khoản đã liên kết. Chọn loại tài khoản cho các tài khoản Indexa Capital mới được nhập." + setup_needed: "Tài khoản mới sẵn sàng để thiết lập" + status: "Đồng bộ %{timestamp} trước — %{summary}" + status_never: "Chưa bao giờ đồng bộ" + syncing: "Đang đồng bộ..." + total: "Tổng cộng" + unlinked: "Chưa liên kết" + update_credentials: "Cập nhật thông tin xác thực" + + select_accounts: + accounts_selected: "tài khoản đã chọn" + api_error: "Lỗi API: %{message}" + cancel: "Hủy" + configure_name_in_provider: "Không thể nhập - vui lòng cấu hình tên tài khoản trong Indexa Capital" + description: "Chọn tài khoản bạn muốn liên kết với tài khoản %{product_name} của bạn." + link_accounts: "Liên kết tài khoản đã chọn" + no_accounts_found: "Không tìm thấy tài khoản. Vui lòng kiểm tra thông tin xác thực Indexa Capital." + no_api_key: "Thông tin xác thực Indexa Capital chưa được cấu hình. Vui lòng cấu hình trong Cài đặt." + no_credentials_configured: "Vui lòng cấu hình thông tin xác thực Indexa Capital trước trong Cài đặt nhà cung cấp." + no_name_placeholder: "(Không có tên)" + title: "Chọn tài khoản Indexa Capital" + + select_existing_account: + account_already_linked: "Tài khoản này đã được liên kết với nhà cung cấp" + all_accounts_already_linked: "Tất cả tài khoản Indexa Capital đã được liên kết" + api_error: "Lỗi API: %{message}" + balance_label: "Số dư:" + cancel: "Hủy" + cancel_button: "Hủy" + configure_name_in_provider: "Không thể nhập - vui lòng cấu hình tên tài khoản trong Indexa Capital" + connect_hint: "Kết nối tài khoản Indexa Capital để bật đồng bộ tự động." + description: "Chọn tài khoản Indexa Capital để liên kết với tài khoản này. Giao dịch sẽ được đồng bộ và loại bỏ trùng lặp tự động." + header: "Liên kết với Indexa Capital" + link_account: "Liên kết tài khoản" + link_button: "Liên kết tài khoản này" + linking_to: "Đang liên kết với:" + no_account_specified: "Chưa chỉ định tài khoản" + no_accounts: "Không tìm thấy tài khoản Indexa Capital chưa liên kết." + no_accounts_found: "Không tìm thấy tài khoản Indexa Capital. Vui lòng kiểm tra thông tin xác thực." + no_api_key: "Thông tin xác thực Indexa Capital chưa được cấu hình. Vui lòng cấu hình trong Cài đặt." + no_credentials_configured: "Vui lòng cấu hình thông tin xác thực Indexa Capital trước trong Cài đặt nhà cung cấp." + no_name_placeholder: "(Không có tên)" + settings_link: "Đi đến Cài đặt nhà cung cấp" + subtitle: "Chọn tài khoản Indexa Capital" + title: "Liên kết %{account_name} với Indexa Capital" + + link_existing_account: + account_already_linked: "Tài khoản này đã được liên kết với nhà cung cấp" + api_error: "Lỗi API: %{message}" + invalid_account_name: "Không thể liên kết tài khoản không có tên" + provider_account_already_linked: "Tài khoản Indexa Capital này đã được liên kết với tài khoản khác" + provider_account_not_found: "Không tìm thấy tài khoản Indexa Capital" + missing_parameters: "Thiếu tham số bắt buộc" + no_api_key: "Không tìm thấy thông tin xác thực Indexa Capital. Vui lòng cấu hình trong Cài đặt nhà cung cấp." + success: "Đã liên kết thành công %{account_name} với Indexa Capital" + + setup_accounts: + account_type_label: "Loại tài khoản:" + accounts_count: + one: "%{count} tài khoản có sẵn" + other: "%{count} tài khoản có sẵn" + all_accounts_linked: "Tất cả tài khoản Indexa Capital của bạn đã được thiết lập." + api_error: "Lỗi API: %{message}" + creating: "Đang tạo tài khoản..." + fetch_failed: "Tải tài khoản thất bại" + import_selected: "Nhập tài khoản đã chọn" + instructions: "Chọn tài khoản bạn muốn nhập từ Indexa Capital. Bạn có thể chọn nhiều tài khoản." + no_accounts: "Không tìm thấy tài khoản chưa liên kết từ kết nối Indexa Capital này." + no_accounts_to_setup: "Không có tài khoản nào để thiết lập" + no_api_key: "Thông tin xác thực Indexa Capital chưa được cấu hình. Vui lòng kiểm tra cài đặt kết nối." + select_all: "Chọn tất cả" + account_types: + skip: "Bỏ qua tài khoản này" + depository: "Tài khoản thanh toán hoặc tiết kiệm" + credit_card: "Thẻ tín dụng" + investment: "Tài khoản đầu tư" + crypto: "Tài khoản tiền điện tử" + loan: "Vay hoặc thế chấp" + other_asset: "Tài sản khác" + subtype_labels: + depository: "Loại phụ tài khoản:" + credit_card: "" + investment: "Loại đầu tư:" + crypto: "" + loan: "Loại vay:" + other_asset: "" + subtype_messages: + credit_card: "Thẻ tín dụng sẽ được tự động thiết lập dưới dạng tài khoản thẻ tín dụng." + other_asset: "Không cần tùy chọn bổ sung cho Tài sản khác." + crypto: "Tài khoản tiền điện tử sẽ được thiết lập để theo dõi tài sản nắm giữ và giao dịch." + subtypes: + depository: + checking: "Tài khoản thanh toán" + savings: "Tài khoản tiết kiệm" + hsa: "Tài khoản tiết kiệm y tế" + cd: "Chứng chỉ tiền gửi" + money_market: "Thị trường tiền tệ" + investment: + brokerage: "Brokerage" + pension: "Lương hưu" + retirement: "Hưu trí" + "401k": "401(k)" + roth_401k: "Roth 401(k)" + "403b": "403(b)" + tsp: "Thrift Savings Plan" + "529_plan": "529 Plan" + hsa: "Tài khoản tiết kiệm y tế" + mutual_fund: "Quỹ tương hỗ" + ira: "Traditional IRA" + roth_ira: "Roth IRA" + angel: "Angel" + loan: + mortgage: "Thế chấp" + student: "Vay sinh viên" + auto: "Vay mua xe" + other: "Vay khác" + balance: "Số dư" + cancel: "Hủy" + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Indexa Capital:" + create_accounts: "Tạo tài khoản" + creating_accounts: "Đang tạo tài khoản..." + historical_data_range: "Phạm vi dữ liệu lịch sử:" + subtitle: "Chọn đúng loại tài khoản cho các tài khoản đã nhập" + sync_start_date_help: "Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ." + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + title: "Thiết lập tài khoản Indexa Capital của bạn" + + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + creation_failed: "Tạo tài khoản thất bại: %{error}" + no_accounts: "Không có tài khoản nào để thiết lập." + success: "Đã tạo thành công %{count} tài khoản." + + preload_accounts: + no_credentials_configured: "Vui lòng cấu hình thông tin xác thực Indexa Capital trước trong Cài đặt nhà cung cấp." diff --git a/config/locales/views/investments/vi.yml b/config/locales/views/investments/vi.yml new file mode 100644 index 000000000..7b3a504cd --- /dev/null +++ b/config/locales/views/investments/vi.yml @@ -0,0 +1,196 @@ +--- +vi: + investments: + edit: + edit: Chỉnh sửa %{account} + form: + none: Không có + subtype_prompt: Chọn loại đầu tư + new: + title: Nhập số dư tài khoản + show: + chart_title: Tổng giá trị + subtypes: + # United States + brokerage: + short: Brokerage + long: Brokerage + 401k: + short: 401(k) + long: 401(k) + roth_401k: + short: Roth 401(k) + long: Roth 401(k) + 403b: + short: 403(b) + long: 403(b) + 457b: + short: 457(b) + long: 457(b) + tsp: + short: TSP + long: Thrift Savings Plan + ira: + short: IRA + long: Traditional IRA + roth_ira: + short: Roth IRA + long: Roth IRA + sep_ira: + short: SEP IRA + long: SEP IRA + simple_ira: + short: SIMPLE IRA + long: SIMPLE IRA + 529_plan: + short: 529 Plan + long: 529 Education Savings Plan + hsa: + short: HSA + long: Tài khoản tiết kiệm y tế + ugma: + short: UGMA + long: Tài khoản ủy thác UGMA + utma: + short: UTMA + long: Tài khoản ủy thác UTMA + # United Kingdom + isa: + short: ISA + long: Tài khoản tiết kiệm cá nhân + lisa: + short: LISA + long: Lifetime ISA + sipp: + short: SIPP + long: Quỹ hưu trí cá nhân tự quản + workplace_pension_uk: + short: Lương hưu + long: Lương hưu doanh nghiệp + # Canada + rrsp: + short: RRSP + long: Kế hoạch tiết kiệm hưu trí đăng ký + tfsa: + short: TFSA + long: Tài khoản tiết kiệm miễn thuế + resp: + short: RESP + long: Kế hoạch tiết kiệm giáo dục đăng ký + lira: + short: LIRA + long: Tài khoản hưu trí bị phong tỏa + rrif: + short: RRIF + long: Quỹ thu nhập hưu trí đăng ký + # Australia + super: + short: Super + long: Siêu quỹ hưu trí + smsf: + short: SMSF + long: Quỹ siêu hưu trí tự quản + # Europe + pea: + short: PEA + long: Plan d'Épargne en Actions + pillar_3a: + short: Pillar 3a + long: Lương hưu tư nhân (Pillar 3a) + riester: + short: Riester + long: Riester-Rente + # India + nps: + short: NPS + long: Hệ thống lương hưu quốc gia + apy: + short: APY + long: Atal Pension Yojana + indian_stocks: + short: Cổ phiếu Ấn Độ + long: Cổ phiếu Ấn Độ (Demat) + indian_equity: + short: Cổ phần Ấn Độ + long: Cổ phần Ấn Độ + indian_etf: + short: ETF Ấn Độ + long: ETF Ấn Độ + life_insurance: + short: Bảo hiểm nhân thọ + long: Bảo hiểm nhân thọ + ppf: + short: PPF + long: Quỹ tiết kiệm công cộng + ssy: + short: SSY + long: Sukanya Samriddhi Yojana + nsc: + short: NSC + long: Chứng chỉ tiết kiệm quốc gia + scss: + short: SCSS + long: Kế hoạch tiết kiệm người cao tuổi + fd: + short: FD + long: Tiền gửi cố định + rd: + short: RD + long: Tiền gửi định kỳ + pomis: + short: POMIS + long: Kế hoạch thu nhập hàng tháng bưu điện + kvp: + short: KVP + long: Kisan Vikas Patra + gold_etf: + short: ETF Vàng + long: ETF Vàng + gold_mf: + short: Quỹ tương hỗ Vàng + long: Quỹ tương hỗ Vàng + sgb: + short: SGB + long: Trái phiếu vàng có bảo đảm + g_sec: + short: G-Sec + long: Chứng khoán chính phủ (G-Secs) + sdl: + short: SDL + long: Khoản vay phát triển tiểu bang (SDLs) + corporate_bond: + short: Trái phiếu doanh nghiệp + long: Trái phiếu doanh nghiệp + infrastructure_bond: + short: Trái phiếu cơ sở hạ tầng + long: Trái phiếu cơ sở hạ tầng + tax_free_bond: + short: Trái phiếu miễn thuế + long: Trái phiếu miễn thuế + # Generic + pension: + short: Lương hưu + long: Lương hưu + retirement: + short: Hưu trí + long: Tài khoản hưu trí + mutual_fund: + short: Quỹ tương hỗ + long: Quỹ tương hỗ + gold: + short: Vàng + long: Vàng (vật chất hoặc kỹ thuật số) + angel: + short: Angel + long: Đầu tư thiên thần + trust: + short: Quỹ tín thác + long: Quỹ tín thác + other: + short: Khác + long: Đầu tư khác + value_tooltip: + cash: Tiền mặt + holdings: Danh mục nắm giữ + total: Số dư danh mục + total_value_tooltip: Tổng số dư danh mục là tổng tiền mặt tại sàn giao dịch (có sẵn để giao dịch) và giá trị thị trường hiện tại của các tài sản nắm giữ. diff --git a/config/locales/views/invitation_mailer/vi.yml b/config/locales/views/invitation_mailer/vi.yml new file mode 100644 index 000000000..6e57ba19f --- /dev/null +++ b/config/locales/views/invitation_mailer/vi.yml @@ -0,0 +1,8 @@ +--- +vi: + invitation_mailer: + invite_email: + accept_button: Chấp nhận lời mời + body: "%{inviter} đã mời bạn tham gia %{family} %{moniker} trên %{product_name}!" + expiry_notice: Lời mời này sẽ hết hạn sau %{days} ngày + greeting: Chào mừng đến với %{product_name}! diff --git a/config/locales/views/invitations/vi.yml b/config/locales/views/invitations/vi.yml new file mode 100644 index 000000000..68df7ddce --- /dev/null +++ b/config/locales/views/invitations/vi.yml @@ -0,0 +1,28 @@ +--- +vi: + invitations: + accept_choice: + create_account: Tạo tài khoản mới + joined_household: Bạn đã tham gia hộ gia đình. + message: "%{inviter} đã mời bạn tham gia với tư cách %{role}." + sign_in_existing: Tôi đã có tài khoản + title: Tham gia %{family} + create: + existing_user_added: Người dùng đã được thêm vào hộ gia đình của bạn. + existing_user_has_family_data: Người dùng đó đã sở hữu một hộ gia đình có tài khoản. Họ cần xóa hoặc chuyển những tài khoản đó trước khi tham gia vào hộ gia đình của bạn. + failure: Không thể gửi lời mời + success: Lời mời đã được gửi thành công + destroy: + failure: Đã xảy ra sự cố khi xóa lời mời. + not_authorized: Bạn không được phép quản lý lời mời. + success: Lời mời đã được xóa thành công. + new: + email_label: Địa chỉ email + email_placeholder: Nhập địa chỉ email + role_admin: Quản trị viên + role_guest: Khách + role_label: Vai trò + role_member: Thành viên + submit: Gửi lời mời + subtitle: Gửi lời mời để tham gia tài khoản %{moniker} của bạn trên %{product_name} + title: Mời ai đó diff --git a/config/locales/views/invite_codes/vi.yml b/config/locales/views/invite_codes/vi.yml new file mode 100644 index 000000000..339fa8d58 --- /dev/null +++ b/config/locales/views/invite_codes/vi.yml @@ -0,0 +1,10 @@ +--- +vi: + invite_codes: + create: + success: "Mã đã được tạo" + destroy: + success: "Mã đã được xóa" + index: + invite_code_description: Tạo mã mới để xem nó được hiển thị ở đây. Các mã đã được tạo và sử dụng sẽ không còn được hiển thị nữa. + no_invite_codes: Không có mã nào để hiển thị diff --git a/config/locales/views/kraken_items/vi.yml b/config/locales/views/kraken_items/vi.yml new file mode 100644 index 000000000..4878281ec --- /dev/null +++ b/config/locales/views/kraken_items/vi.yml @@ -0,0 +1,85 @@ +--- +vi: + kraken_items: + provider_connection: + default_name: Kraken + default_description: Liên kết với tài khoản sàn giao dịch Kraken + name: "Kraken - %{name}" + description: "Liên kết với %{name}" + create: + default_name: Kraken + success: Đã kết nối thành công với Kraken. Tài khoản sàn giao dịch của bạn đang được đồng bộ. + update: + success: Đã cập nhật kết nối Kraken thành công. + destroy: + success: Đã lên lịch xóa kết nối Kraken. + select_accounts: + select_connection: Chọn kết nối Kraken trong Cài đặt nhà cung cấp. + no_credentials_configured: Thêm thông tin API Kraken trước khi thiết lập tài khoản. + link_accounts: + select_connection: Chọn kết nối Kraken trước khi liên kết tài khoản. + select_existing_account: + title: Liên kết tài khoản Kraken + no_accounts_found: Không tìm thấy tài khoản Kraken nào. + wait_for_sync: Chờ Kraken hoàn tất đồng bộ. + check_provider_health: Kiểm tra xem thông tin API Kraken của bạn có hợp lệ không. + link: Liên kết + cancel: Hủy + link_existing_account: + success: Đã liên kết thành công với tài khoản Kraken + select_connection: Chọn kết nối Kraken trước khi liên kết tài khoản. + errors: + only_manual: Chỉ tài khoản tiền điện tử thủ công chưa có liên kết nhà cung cấp mới có thể liên kết với Kraken + invalid_kraken_account: Tài khoản Kraken không hợp lệ + kraken_account_already_linked: Tài khoản Kraken này đã được liên kết + setup_accounts: + title: Nhập tài khoản Kraken + subtitle: Chọn tài khoản sàn giao dịch để theo dõi + instructions: Kraken nhập một tài khoản sàn giao dịch tiền điện tử kết hợp cho kết nối này, chỉ với các tài sản nắm giữ và lệnh giao ngay. + no_accounts: Tất cả tài khoản Kraken đã được nhập. + accounts_count: + one: "%{count} tài khoản có sẵn" + other: "%{count} tài khoản có sẵn" + select_all: Chọn tất cả + import_selected: Nhập đã chọn + cancel: Hủy + creating: Đang nhập... + complete_account_setup: + success: + one: "Đã nhập %{count} tài khoản" + other: "Đã nhập %{count} tài khoản" + none_selected: Chưa chọn tài khoản nào + no_accounts: Không có tài khoản nào để nhập + kraken_item: + provider_name: Kraken + syncing: Đang đồng bộ... + reconnect: Thông tin xác thực cần cập nhật + deletion_in_progress: Đang xóa... + sync_status: + no_accounts: Không tìm thấy tài khoản + all_synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + partial_sync: "%{linked_count} đã đồng bộ, %{unlinked_count} cần thiết lập" + status: "Đồng bộ lần cuối %{timestamp} trước" + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + status_never: Chưa bao giờ đồng bộ + delete: Xóa + no_accounts_title: Không tìm thấy tài khoản + no_accounts_message: Tài khoản sàn giao dịch Kraken của bạn sẽ xuất hiện ở đây sau khi đồng bộ. + setup_needed: Tài khoản sẵn sàng để nhập + setup_description: Nhập kết nối Kraken này dưới dạng tài khoản sàn giao dịch tiền điện tử. + setup_action: Nhập tài khoản + import_accounts_menu: Nhập tài khoản + stale_rate_warning: "Số dư là xấp xỉ vì tỷ giá hối đoái chính xác cho ngày %{date} không có sẵn. Sẽ cập nhật lần đồng bộ tiếp theo." + kraken_item: + syncer: + checking_credentials: Đang kiểm tra thông tin xác thực... + credentials_invalid: Thông tin API Kraken không hợp lệ. Vui lòng kiểm tra khóa API và bí mật của bạn. + importing_accounts: Đang nhập tài khoản từ Kraken... + checking_configuration: Đang kiểm tra cấu hình tài khoản... + accounts_need_setup: + one: "%{count} tài khoản cần thiết lập" + other: "%{count} tài khoản cần thiết lập" + processing_accounts: Đang xử lý dữ liệu tài khoản... + calculating_balances: Đang tính toán số dư... diff --git a/config/locales/views/layout/vi.yml b/config/locales/views/layout/vi.yml new file mode 100644 index 000000000..87d2f4ded --- /dev/null +++ b/config/locales/views/layout/vi.yml @@ -0,0 +1,29 @@ +--- +vi: + layouts: + application: + privacy_mode: Bật/tắt chế độ riêng tư + skip_to_main: Chuyển đến nội dung chính + nav: + assistant: Trợ lý + budgets: Ngân sách + home: Trang chủ + reports: Báo cáo + transactions: Giao dịch + auth: + existing_account: Đã có tài khoản? + no_account: Mới dùng %{product_name}? + sign_in: Đăng nhập + sign_up: Tạo tài khoản + shared: + footer: + privacy_policy: Chính sách bảo mật + terms_of_service: Điều khoản dịch vụ + confirm_dialog: + are_you_sure: Bạn có chắc không? + cannot_be_undone: Hành động này không thể hoàn tác. + confirm: Xác nhận + trial: + open_demo: Mở bản demo + data_deleted_in_days: Dữ liệu sẽ bị xóa sau %{days} ngày + contribute: Đóng góp diff --git a/config/locales/views/loans/vi.yml b/config/locales/views/loans/vi.yml new file mode 100644 index 000000000..14de162ec --- /dev/null +++ b/config/locales/views/loans/vi.yml @@ -0,0 +1,37 @@ +--- +vi: + loans: + edit: + edit: Chỉnh sửa %{account} + form: + interest_rate: Lãi suất + interest_rate_placeholder: '5.25' + initial_balance: Số dư khoản vay ban đầu + rate_type: Loại lãi suất + term_months: Kỳ hạn (tháng) + term_months_placeholder: '360' + none: Không có + subtype_prompt: Chọn loại khoản vay + subtype_none: Không có + new: + title: Nhập thông tin khoản vay + overview: + interest_rate: Lãi suất + monthly_payment: Thanh toán hàng tháng + not_applicable: N/A + original_principal: Vốn gốc ban đầu + remaining_principal: Vốn gốc còn lại + term: Kỳ hạn + type: Loại + unknown: Không xác định + tabs: + overview: + interest_rate: Lãi suất + monthly_payment: Thanh toán hàng tháng + not_applicable: N/A + original_principal: Vốn gốc ban đầu + remaining_principal: Vốn gốc còn lại + term: Kỳ hạn + type: Loại + unknown: Không xác định + edit_loan_details: "Chỉnh sửa thông tin khoản vay" diff --git a/config/locales/views/lunchflow_items/vi.yml b/config/locales/views/lunchflow_items/vi.yml new file mode 100644 index 000000000..fa02ef27c --- /dev/null +++ b/config/locales/views/lunchflow_items/vi.yml @@ -0,0 +1,166 @@ +--- +vi: + lunchflow_items: + api_error: + title: Lỗi kết nối Lunchflow + unable_to_connect: Không thể kết nối với Lunchflow + common_issues: "Các vấn đề thường gặp:" + invalid_api_key_label: Khóa API không hợp lệ + invalid_api_key_desc: Kiểm tra khóa API của bạn trong Cài đặt nhà cung cấp + expired_credentials_label: Thông tin xác thực hết hạn + expired_credentials_desc: Tạo khóa API mới từ Lunchflow + network_issue_label: Sự cố mạng + network_issue_desc: Kiểm tra kết nối internet của bạn + service_down_label: Dịch vụ gián đoạn + service_down_desc: API Lunchflow có thể tạm thời không khả dụng + check_provider_settings: Kiểm tra Cài đặt nhà cung cấp + setup_required: + title: Cần thiết lập Lunchflow + api_key_not_configured: Khóa API chưa được cấu hình + api_key_description: Trước khi liên kết tài khoản Lunchflow, bạn cần cấu hình khóa API Lunchflow. + setup_steps_title: "Các bước thiết lập:" + setup_step_1_html: "Đi đến Cài đặt → Nhà cung cấp" + setup_step_2_html: "Tìm phần Lunchflow" + setup_step_3: Nhập khóa API Lunchflow của bạn + setup_step_4: Quay lại đây để liên kết tài khoản + go_to_provider_settings: Đi đến Cài đặt nhà cung cấp + create: + success: Kết nối Lunchflow đã được tạo thành công + destroy: + success: Kết nối Lunchflow đã được xóa + index: + title: Kết nối Lunchflow + loading: + loading_message: Đang tải tài khoản Lunchflow... + loading_title: Đang tải + link_accounts: + all_already_linked: + one: "Tài khoản đã chọn (%{names}) đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết: %{names}" + api_error: "Lỗi API: %{message}" + invalid_account_names: + one: "Không thể liên kết tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + link_failed: Liên kết tài khoản thất bại + no_accounts_selected: Vui lòng chọn ít nhất một tài khoản + partial_invalid: "Đã liên kết thành công %{created_count} tài khoản, %{already_linked_count} đã được liên kết, %{invalid_count} tài khoản có tên không hợp lệ" + partial_success: "Đã liên kết thành công %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết: %{already_linked_names}" + success: + one: "Đã liên kết thành công %{count} tài khoản" + other: "Đã liên kết thành công %{count} tài khoản" + lunchflow_item: + accounts_need_setup: Tài khoản cần thiết lập + delete: Xóa kết nối + deletion_in_progress: đang xóa... + error: Lỗi + no_accounts_description: Kết nối này chưa có tài khoản nào được liên kết. + no_accounts_title: Không có tài khoản + setup_action: Thiết lập tài khoản mới + setup_description: "%{linked} trong số %{total} tài khoản đã liên kết. Chọn loại tài khoản cho các tài khoản Lunchflow mới được nhập." + setup_needed: Tài khoản mới sẵn sàng để thiết lập + status: "Đồng bộ %{timestamp} trước" + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước • %{summary}" + syncing: Đang đồng bộ... + total: Tổng cộng + unlinked: Chưa liên kết + select_accounts: + accounts_selected: tài khoản đã chọn + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_lunchflow: Không thể nhập - vui lòng cấu hình tên tài khoản trong Lunchflow + description: Chọn tài khoản bạn muốn liên kết với tài khoản %{product_name} của bạn. + link_accounts: Liên kết tài khoản đã chọn + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình khóa API. + no_api_key: Khóa API Lunchflow chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_name_placeholder: "(Không có tên)" + title: Chọn tài khoản Lunchflow + select_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + all_accounts_already_linked: Tất cả tài khoản Lunchflow đã được liên kết + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_lunchflow: Không thể nhập - vui lòng cấu hình tên tài khoản trong Lunchflow + description: Chọn tài khoản Lunchflow để liên kết với tài khoản này. Giao dịch sẽ được đồng bộ và loại bỏ trùng lặp tự động. + link_account: Liên kết tài khoản + no_account_specified: Chưa chỉ định tài khoản + no_accounts_found: Không tìm thấy tài khoản Lunchflow. Vui lòng kiểm tra cấu hình khóa API. + no_api_key: Khóa API Lunchflow chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_name_placeholder: "(Không có tên)" + title: "Liên kết %{account_name} với Lunchflow" + link_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + api_error: "Lỗi API: %{message}" + invalid_account_name: Không thể liên kết tài khoản không có tên + lunchflow_account_already_linked: Tài khoản Lunchflow này đã được liên kết với tài khoản khác + lunchflow_account_not_found: Không tìm thấy tài khoản Lunchflow + missing_parameters: Thiếu tham số bắt buộc + success: "Đã liên kết thành công %{account_name} với Lunchflow" + setup_accounts: + account_type_label: "Loại tài khoản:" + all_accounts_linked: "Tất cả tài khoản Lunchflow của bạn đã được thiết lập." + api_error: "Lỗi API: %{message}" + fetch_failed: "Tải tài khoản thất bại" + no_accounts_to_setup: "Không có tài khoản nào để thiết lập" + no_api_key: "Khóa API Lunchflow chưa được cấu hình. Vui lòng kiểm tra cài đặt kết nối." + account_types: + skip: Bỏ qua tài khoản này + depository: Tài khoản thanh toán hoặc tiết kiệm + credit_card: Thẻ tín dụng + investment: Tài khoản đầu tư + loan: Vay hoặc thế chấp + other_asset: Tài sản khác + subtype_labels: + depository: "Loại phụ tài khoản:" + credit_card: "" + investment: "Loại đầu tư:" + loan: "Loại vay:" + other_asset: "" + subtype_messages: + credit_card: "Thẻ tín dụng sẽ được tự động thiết lập dưới dạng tài khoản thẻ tín dụng." + other_asset: "Không cần tùy chọn bổ sung cho Tài sản khác." + subtypes: + depository: + checking: Tài khoản thanh toán + savings: Tài khoản tiết kiệm + hsa: Tài khoản tiết kiệm y tế + cd: Chứng chỉ tiền gửi + money_market: Thị trường tiền tệ + investment: + brokerage: Brokerage + pension: Lương hưu + retirement: Hưu trí + "401k": "401(k)" + roth_401k: "Roth 401(k)" + "403b": "403(b)" + tsp: Thrift Savings Plan + "529_plan": "529 Plan" + hsa: Tài khoản tiết kiệm y tế + mutual_fund: Quỹ tương hỗ + ira: Traditional IRA + roth_ira: Roth IRA + angel: Angel + loan: + mortgage: Thế chấp + student: Vay sinh viên + auto: Vay mua xe + other: Vay khác + balance: Số dư + cancel: Hủy + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Lunchflow:" + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + historical_data_range: "Phạm vi dữ liệu lịch sử:" + subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + sync_start_date_help: Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ. Tối đa 3 năm lịch sử có sẵn. + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + title: Thiết lập tài khoản Lunchflow của bạn + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + creation_failed: "Tạo tài khoản thất bại: %{error}" + no_accounts: "Không có tài khoản nào để thiết lập." + success: "Đã tạo thành công %{count} tài khoản." + sync: + success: Đã bắt đầu đồng bộ + update: + success: Kết nối Lunchflow đã được cập nhật diff --git a/config/locales/views/merchants/vi.yml b/config/locales/views/merchants/vi.yml new file mode 100644 index 000000000..6ed4d6765 --- /dev/null +++ b/config/locales/views/merchants/vi.yml @@ -0,0 +1,73 @@ +--- +vi: + family_merchants: + create: + error: 'Lỗi khi tạo nhà cung cấp: %{error}' + success: Nhà cung cấp mới đã được tạo thành công + destroy: + success: Nhà cung cấp đã được xóa thành công + unlinked_success: Nhà cung cấp đã được xóa khỏi giao dịch của bạn + edit: + title: Chỉnh sửa nhà cung cấp + form: + name_placeholder: Tên nhà cung cấp + website_placeholder: "Trang web (ví dụ: starbucks.com)" + website_hint: Nhập trang web của nhà cung cấp để tự động hiển thị logo của họ + index: + empty: Chưa có nhà cung cấp nào + new: Nhà cung cấp mới + merge: Hợp nhất nhà cung cấp + title: Nhà cung cấp + family_title: "Nhà cung cấp của %{moniker}" + family_empty: "Chưa có nhà cung cấp nào của %{moniker}" + provider_title: Nhà cung cấp từ dịch vụ + provider_empty: "Chưa có nhà cung cấp dịch vụ nào được liên kết với %{moniker} này" + provider_read_only: Nhà cung cấp từ dịch vụ được đồng bộ từ các tổ chức tài chính đã kết nối. Không thể chỉnh sửa ở đây. + provider_info: Các nhà cung cấp này được phát hiện tự động bởi kết nối ngân hàng hoặc AI của bạn. Bạn có thể chỉnh sửa chúng để tạo bản sao riêng hoặc xóa chúng để hủy liên kết khỏi giao dịch của bạn. + enhance_info: + one: "%{count} nhà cung cấp dịch vụ đang thiếu thông tin trang web. Cải thiện với AI để phát hiện trang web, hiển thị logo và hợp nhất các nhà cung cấp trùng lặp." + other: "%{count} nhà cung cấp dịch vụ đang thiếu thông tin trang web. Cải thiện với AI để phát hiện trang web, hiển thị logo và hợp nhất các nhà cung cấp trùng lặp." + enhance_button: Cải thiện với AI + unlinked_title: Vừa hủy liên kết + unlinked_info: Các nhà cung cấp này vừa được xóa khỏi giao dịch của bạn. Họ sẽ biến mất khỏi danh sách này sau 30 ngày trừ khi được gán lại cho một giao dịch. + table: + merchant: Nhà cung cấp + actions: Hành động + source: Nguồn + family_merchant: + edit: Chỉnh sửa + delete: Xóa + merchant: + confirm_accept: Xóa nhà cung cấp + confirm_body: Bạn có chắc chắn muốn xóa nhà cung cấp này không? Xóa nhà cung cấp này sẽ hủy liên kết tất cả giao dịch liên quan và có thể ảnh hưởng đến báo cáo của bạn. + confirm_title: Xóa nhà cung cấp? + delete: Xóa nhà cung cấp + edit: Chỉnh sửa nhà cung cấp + merge: + title: Hợp nhất nhà cung cấp + description: Chọn nhà cung cấp đích và các nhà cung cấp cần hợp nhất vào đó. Tất cả giao dịch từ các nhà cung cấp được hợp nhất sẽ được chuyển sang nhà cung cấp đích. + target_label: Hợp nhất vào (đích) + select_target: Chọn nhà cung cấp đích... + sources_label: Nhà cung cấp cần hợp nhất + sources_hint: Các nhà cung cấp được chọn sẽ được hợp nhất vào đích. Nhà cung cấp gia đình sẽ bị xóa, nhà cung cấp dịch vụ sẽ bị hủy liên kết. + submit: Hợp nhất đã chọn + new: + title: Nhà cung cấp mới + perform_merge: + success: + one: Đã hợp nhất thành công %{count} nhà cung cấp + other: Đã hợp nhất thành công %{count} nhà cung cấp + no_merchants_selected: Không có nhà cung cấp nào được chọn để hợp nhất + target_not_found: Không tìm thấy nhà cung cấp đích + invalid_merchants: Nhà cung cấp được chọn không hợp lệ + provider_merchant: + edit: Chỉnh sửa + remove: Xóa + remove_confirm_title: Xóa nhà cung cấp? + remove_confirm_body: Bạn có chắc chắn muốn xóa %{name} không? Thao tác này sẽ hủy liên kết tất cả giao dịch liên quan khỏi nhà cung cấp này nhưng sẽ không xóa nhà cung cấp. + enhance: + success: Quá trình cải thiện nhà cung cấp dịch vụ đã bắt đầu. Các nhà cung cấp sẽ được cải thiện và các bản trùng lặp sẽ được hợp nhất trong thời gian ngắn. + already_running: Quá trình cải thiện đang diễn ra. Vui lòng chờ cho đến khi hoàn tất. + update: + success: Nhà cung cấp đã được cập nhật thành công + converted_success: Nhà cung cấp đã được chuyển đổi và cập nhật thành công diff --git a/config/locales/views/mercury_items/vi.yml b/config/locales/views/mercury_items/vi.yml new file mode 100644 index 000000000..01c2c3ea1 --- /dev/null +++ b/config/locales/views/mercury_items/vi.yml @@ -0,0 +1,208 @@ +--- +vi: + mercury_items: + api_error: + title: Lỗi kết nối Mercury + unable_to_connect: Không thể kết nối với Mercury + common_issues: "Các vấn đề thường gặp:" + invalid_api_token_label: Mã thông báo API không hợp lệ + invalid_api_token_desc: Kiểm tra mã thông báo API của bạn trong Cài đặt nhà cung cấp + expired_credentials_label: Thông tin xác thực hết hạn + expired_credentials_desc: Tạo mã thông báo API mới từ Mercury + insufficient_permissions_label: Quyền không đủ + insufficient_permissions_desc: Đảm bảo mã thông báo có quyền chỉ đọc + network_issue_label: Sự cố mạng + network_issue_desc: Kiểm tra kết nối internet của bạn + service_down_label: Dịch vụ gián đoạn + service_down_desc: API Mercury có thể tạm thời không khả dụng + check_provider_settings: Kiểm tra Cài đặt nhà cung cấp + setup_required: + title: Cần thiết lập Mercury + api_token_not_configured: Mã thông báo API chưa được cấu hình + api_token_description: Trước khi liên kết tài khoản Mercury, bạn cần cấu hình mã thông báo API Mercury. + setup_steps_title: "Các bước thiết lập:" + setup_step_1_html: "Đi đến Cài đặt > Nhà cung cấp" + setup_step_2_html: "Tìm phần Mercury" + setup_step_3: Nhập mã thông báo API Mercury của bạn + setup_step_4: Quay lại đây để liên kết tài khoản + go_to_provider_settings: Đi đến Cài đặt nhà cung cấp + create: + success: Kết nối Mercury đã được tạo thành công + destroy: + success: Kết nối Mercury đã được xóa + index: + title: Kết nối Mercury + loading: + loading_message: Đang tải tài khoản Mercury... + loading_title: Đang tải + link_accounts: + all_already_linked: + one: "Tài khoản đã chọn (%{names}) đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết: %{names}" + api_error: "Lỗi API: %{message}" + invalid_account_names: + one: "Không thể liên kết tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + link_failed: Liên kết tài khoản thất bại + no_accounts_selected: Vui lòng chọn ít nhất một tài khoản + no_api_token: Không tìm thấy mã thông báo API Mercury. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + partial_invalid: "Đã liên kết thành công %{created_count} tài khoản, %{already_linked_count} đã được liên kết, %{invalid_count} tài khoản có tên không hợp lệ" + partial_success: "Đã liên kết thành công %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết: %{already_linked_names}" + select_connection: Chọn kết nối Mercury trước khi liên kết tài khoản. + success: + one: "Đã liên kết thành công %{count} tài khoản" + other: "Đã liên kết thành công %{count} tài khoản" + mercury_item: + accounts_need_setup: Tài khoản cần thiết lập + delete: Xóa kết nối + deletion_in_progress: đang xóa... + error: Lỗi + no_accounts_description: Kết nối này chưa có tài khoản nào được liên kết. + no_accounts_title: Không có tài khoản + setup_action: Thiết lập tài khoản mới + setup_description: "%{linked} trong số %{total} tài khoản đã liên kết. Chọn loại tài khoản cho các tài khoản Mercury mới được nhập." + setup_needed: Tài khoản mới sẵn sàng để thiết lập + status: "Đồng bộ %{timestamp} trước" + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + syncing: Đang đồng bộ... + total: Tổng cộng + unlinked: Chưa liên kết + provider_panel: + add_connection: Thêm kết nối Mercury + base_url_label: URL cơ sở (tùy chọn) + base_url_placeholder: https://api.mercury.com/api/v1 (mặc định) + connection_name_label: Tên kết nối + connection_name_placeholder: Tài khoản kinh doanh + default_connection_name: Kết nối Mercury + disconnect_confirm: "Ngắt kết nối %{name}?" + instructions: + copy_token_html: "Sao chép toàn bộ mã thông báo (bao gồm tiền tố secret-token:) và thêm làm kết nối có tên bên dưới" + create_token: Tạo mã thông báo API mới với quyền truy cập "Chỉ đọc" + open_tokens: Đi đến Cài đặt > Nhà phát triển > Mã thông báo API + sign_in_html: "Truy cập %{link} và đăng nhập vào tài khoản bạn muốn kết nối" + whitelist_ip_html: "Quan trọng: Thêm địa chỉ IP máy chủ của bạn vào danh sách trắng của mã thông báo" + keep_token_placeholder: Để trống để giữ mã thông báo hiện tại + sandbox_note_html: "Sử dụng kết nối có tên riêng cho mỗi đăng nhập Mercury/mã thông báo API bạn muốn đồng bộ. Để kiểm thử sandbox, dùng https://api-sandbox.mercury.com/api/v1 làm URL cơ sở. Mercury yêu cầu đưa vào danh sách trắng IP - đảm bảo thêm IP của bạn trong bảng điều khiển Mercury." + setup_accounts: Thiết lập tài khoản + setup_title: "Hướng dẫn thiết lập:" + sync: Đồng bộ + token_label: Mã thông báo + token_placeholder: Dán mã thông báo vào đây + update_connection: Cập nhật kết nối + provider_connection: + default_description: Kết nối với ngân hàng của bạn qua Mercury + default_name: Mercury + description: "Kết nối bằng %{name}" + name: "Mercury - %{name}" + select_accounts: + accounts_selected: tài khoản đã chọn + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_mercury: Không thể nhập - vui lòng cấu hình tên tài khoản trong Mercury + description: Chọn tài khoản bạn muốn liên kết với tài khoản %{product_name} của bạn. + link_accounts: Liên kết tài khoản đã chọn + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình mã thông báo API. + no_api_token: Mã thông báo API Mercury chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_credentials_configured: Vui lòng cấu hình mã thông báo API Mercury trước trong Cài đặt nhà cung cấp. + no_name_placeholder: "(Không có tên)" + select_connection: Chọn kết nối Mercury trong Cài đặt nhà cung cấp. + title: Chọn tài khoản Mercury + select_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + all_accounts_already_linked: Tất cả tài khoản Mercury đã được liên kết + api_error: "Lỗi API: %{message}" + cancel: Hủy + configure_name_in_mercury: Không thể nhập - vui lòng cấu hình tên tài khoản trong Mercury + description: Chọn tài khoản Mercury để liên kết với tài khoản này. Giao dịch sẽ được đồng bộ và loại bỏ trùng lặp tự động. + link_account: Liên kết tài khoản + no_account_specified: Chưa chỉ định tài khoản + no_accounts_found: Không tìm thấy tài khoản Mercury. Vui lòng kiểm tra cấu hình mã thông báo API. + no_api_token: Mã thông báo API Mercury chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_credentials_configured: Vui lòng cấu hình mã thông báo API Mercury trước trong Cài đặt nhà cung cấp. + no_name_placeholder: "(Không có tên)" + select_connection: Chọn kết nối Mercury trong Cài đặt nhà cung cấp. + title: "Liên kết %{account_name} với Mercury" + link_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + api_error: "Lỗi API: %{message}" + invalid_account_name: Không thể liên kết tài khoản không có tên + mercury_account_already_linked: Tài khoản Mercury này đã được liên kết với tài khoản khác + mercury_account_not_found: Không tìm thấy tài khoản Mercury + missing_parameters: Thiếu tham số bắt buộc + no_api_token: Không tìm thấy mã thông báo API Mercury. Vui lòng cấu hình trong Cài đặt nhà cung cấp. + select_connection: Chọn kết nối Mercury trước khi liên kết tài khoản. + success: "Đã liên kết thành công %{account_name} với Mercury" + setup_accounts: + account_type_label: "Loại tài khoản:" + all_accounts_linked: "Tất cả tài khoản Mercury của bạn đã được thiết lập." + api_error: "Lỗi API: %{message}" + fetch_failed: "Tải tài khoản thất bại" + no_accounts_to_setup: "Không có tài khoản nào để thiết lập" + no_api_token: "Mã thông báo API Mercury chưa được cấu hình. Vui lòng kiểm tra cài đặt kết nối." + account_types: + skip: Bỏ qua tài khoản này + depository: Tài khoản thanh toán hoặc tiết kiệm + credit_card: Thẻ tín dụng + investment: Tài khoản đầu tư + loan: Vay hoặc thế chấp + other_asset: Tài sản khác + subtype_labels: + depository: "Loại phụ tài khoản:" + credit_card: "" + investment: "Loại đầu tư:" + loan: "Loại vay:" + other_asset: "" + subtype_messages: + credit_card: "Thẻ tín dụng sẽ được tự động thiết lập dưới dạng tài khoản thẻ tín dụng." + other_asset: "Không cần tùy chọn bổ sung cho Tài sản khác." + subtypes: + depository: + checking: Tài khoản thanh toán + savings: Tài khoản tiết kiệm + hsa: Tài khoản tiết kiệm y tế + cd: Chứng chỉ tiền gửi + money_market: Thị trường tiền tệ + investment: + brokerage: Brokerage + pension: Lương hưu + retirement: Hưu trí + "401k": "401(k)" + roth_401k: "Roth 401(k)" + "403b": "403(b)" + tsp: Thrift Savings Plan + "529_plan": "529 Plan" + hsa: Tài khoản tiết kiệm y tế + mutual_fund: Quỹ tương hỗ + ira: Traditional IRA + roth_ira: Roth IRA + angel: Angel + loan: + mortgage: Thế chấp + student: Vay sinh viên + auto: Vay mua xe + other: Vay khác + balance: Số dư + cancel: Hủy + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Mercury:" + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + historical_data_range: "Phạm vi dữ liệu lịch sử:" + subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + sync_start_date_help: Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ. Tối đa 3 năm lịch sử có sẵn. + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + title: Thiết lập tài khoản Mercury của bạn + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + creation_failed: "Tạo tài khoản thất bại: %{error}" + no_accounts: "Không có tài khoản nào để thiết lập." + success: "Đã tạo thành công %{count} tài khoản." + sync: + success: Đã bắt đầu đồng bộ + update: + success: Kết nối Mercury đã được cập nhật + mercury_item_selection_error_payload: + select_connection: Chọn kết nối Mercury trước khi tải tài khoản. + render_mercury_item_selection_failure: + select_connection: Chọn kết nối Mercury trong Cài đặt nhà cung cấp. + no_credentials_configured: Vui lòng cấu hình mã thông báo API Mercury trước trong Cài đặt nhà cung cấp. diff --git a/config/locales/views/messages/vi.yml b/config/locales/views/messages/vi.yml new file mode 100644 index 000000000..aeb02e98c --- /dev/null +++ b/config/locales/views/messages/vi.yml @@ -0,0 +1,6 @@ +--- +vi: + messages: + chat_form: + placeholder: "Hỏi bất cứ điều gì ..." + disclaimer: "Phản hồi của AI chỉ mang tính thông tin. Không phải tư vấn tài chính!" diff --git a/config/locales/views/mfa/vi.yml b/config/locales/views/mfa/vi.yml new file mode 100644 index 000000000..7b3afae37 --- /dev/null +++ b/config/locales/views/mfa/vi.yml @@ -0,0 +1,41 @@ +--- +vi: + mfa: + backup_codes: + backup_codes_description: Mỗi mã chỉ có thể được sử dụng một lần. Hãy giữ các mã này an toàn và bảo mật. + backup_codes_title: Mã dự phòng của bạn + continue: Tiếp tục đến Cài đặt bảo mật + description: Lưu trữ các mã dự phòng này ở nơi an toàn - bạn sẽ cần chúng nếu mất quyền truy cập vào ứng dụng xác thực + page_title: Mã dự phòng + title: Lưu mã dự phòng của bạn + create: + invalid_code: Mã xác minh không hợp lệ. Vui lòng thử lại. + disable: + success: Xác thực hai yếu tố đã bị tắt + new: + code_label: Mã xác minh + code_placeholder: Nhập mã 6 chữ số + description: Tăng cường bảo mật tài khoản của bạn bằng cách thiết lập xác thực hai yếu tố + page_title: Thiết lập xác thực hai yếu tố + scan_description: Sử dụng ứng dụng xác thực như Google Authenticator hoặc 1Password để quét mã QR này + scan_title: 1. Quét mã QR + secret_description: Nếu bạn không thể quét mã QR, hãy nhập mã bí mật này theo cách thủ công vào ứng dụng xác thực của bạn + secret_title: Mã nhập thủ công + title: Thiết lập xác thực hai yếu tố + verify_button: Xác minh và bật 2FA + verify_description: Nhập mã 6 chữ số từ ứng dụng xác thực của bạn + verify_title: 2. Nhập mã xác minh + verify: + description: Nhập mã từ ứng dụng xác thực của bạn để tiếp tục + or: hoặc + page_title: Xác minh xác thực hai yếu tố + title: Xác thực hai yếu tố + verify_button: Xác minh + webauthn_button: Sử dụng khóa passkey hoặc khóa bảo mật + webauthn_unsupported: Trình duyệt này không hỗ trợ passkey hoặc khóa bảo mật. + verify_code: + invalid_code: Mã xác thực không hợp lệ. Vui lòng thử lại. + verify_webauthn: + invalid_credential: Không thể xác minh passkey hoặc khóa bảo mật đó. Vui lòng thử lại. + webauthn_options: + unavailable: Không có passkey hoặc khóa bảo mật nào cho tài khoản này. diff --git a/config/locales/views/oidc_accounts/vi.yml b/config/locales/views/oidc_accounts/vi.yml new file mode 100644 index 000000000..16fd6f008 --- /dev/null +++ b/config/locales/views/oidc_accounts/vi.yml @@ -0,0 +1,42 @@ +--- +vi: + oidc_accounts: + link: + no_pending_oidc: Không tìm thấy xác thực OIDC đang chờ xử lý + title_link: Liên kết tài khoản OIDC + title_create: Tạo tài khoản + verify_heading: Xác minh danh tính của bạn + verify_description_html: "Để liên kết tài khoản %{provider} của bạn%{email_suffix}, vui lòng xác minh danh tính bằng cách nhập mật khẩu." + email_suffix_html: " (%{email})" + email_label: Email + email_placeholder: Nhập email của bạn + password_label: Mật khẩu + password_placeholder: Nhập mật khẩu của bạn + verify_hint: Điều này giúp đảm bảo chỉ bạn mới có thể liên kết các tài khoản bên ngoài với hồ sơ của mình. + submit_link: Liên kết tài khoản + create_heading: Tạo tài khoản mới + create_description_html: "Không tìm thấy tài khoản nào với email %{email}. Nhấp bên dưới để tạo tài khoản mới bằng danh tính %{provider} của bạn." + info_email: "Email:" + info_name: "Tên:" + submit_create: Tạo tài khoản + submit_accept_invitation: Chấp nhận lời mời + account_creation_disabled: Tạo tài khoản mới qua đăng nhập một lần đã bị tắt. Vui lòng liên hệ với quản trị viên để tạo tài khoản của bạn. + cancel: Hủy + create_link: + no_pending_oidc: Không tìm thấy xác thực OIDC đang chờ xử lý + new_user: + no_pending_oidc: Không tìm thấy xác thực OIDC đang chờ xử lý + title: Hoàn tất tài khoản của bạn + heading: Tạo tài khoản của bạn + description: Vui lòng xác nhận thông tin của bạn để hoàn tất tạo tài khoản với danh tính %{provider}. + email_label: Email (từ nhà cung cấp SSO) + first_name_label: Tên + first_name_placeholder: Nhập tên của bạn + last_name_label: Họ + last_name_placeholder: Nhập họ của bạn + submit: Tạo tài khoản + cancel: Hủy + create_user: + no_pending_oidc: Không tìm thấy xác thực OIDC đang chờ xử lý + account_creation_disabled: Tạo tài khoản SSO đã bị tắt. Vui lòng liên hệ với quản trị viên. + account_created: "Chào mừng! Tài khoản của bạn đã được tạo." diff --git a/config/locales/views/onboardings/vi.yml b/config/locales/views/onboardings/vi.yml new file mode 100644 index 000000000..b11bd6a43 --- /dev/null +++ b/config/locales/views/onboardings/vi.yml @@ -0,0 +1,66 @@ +--- +vi: + onboardings: + header: + sign_out: Đăng xuất + setup: Thiết lập + preferences: Tùy chọn + goals: Mục tiêu + start: Bắt đầu + logout: + sign_out: Đăng xuất + show: + title: Hãy thiết lập tài khoản của bạn + subtitle: Trước tiên, hãy thiết lập hồ sơ của bạn. + first_name: Tên + first_name_placeholder: Tên + last_name: Họ + last_name_placeholder: Họ + group_name: Tên nhóm + group_name_placeholder: Tên nhóm + household_name: Tên hộ gia đình + household_name_placeholder: Tên hộ gia đình + moniker_prompt: "Sẽ sử dụng %{product_name} cùng với..." + moniker_family: Thành viên gia đình (chỉ bạn hoặc cùng vợ/chồng, con cái, v.v.) + moniker_group: Nhóm người (công ty, câu lạc bộ, hiệp hội, loại khác) + country: Quốc gia + submit: Tiếp tục + preferences: + title: Cấu hình tùy chọn của bạn + subtitle: Hãy cấu hình tùy chọn của bạn. + example: Tài khoản mẫu + preview: Xem trước cách hiển thị dữ liệu theo tùy chọn. + color_theme: Giao diện màu sắc + theme_system: Hệ thống + theme_light: Sáng + theme_dark: Tối + locale: Ngôn ngữ + currency: Tiền tệ + date_format: Định dạng ngày + submit: Hoàn tất + goals: + title: Điều gì đưa bạn đến đây? + subtitle: Chọn một hoặc nhiều mục tiêu bạn muốn đạt được khi sử dụng %{product_name} làm công cụ tài chính cá nhân. + unified_accounts: Xem tất cả tài khoản ở một nơi + cashflow: Hiểu dòng tiền và chi tiêu + budgeting: Quản lý kế hoạch tài chính và ngân sách + partner: Quản lý tài chính cùng người thân + investments: Theo dõi đầu tư + ai_insights: Để AI giúp tôi hiểu tài chính + optimization: Phân tích và tối ưu hóa tài khoản + reduce_stress: Giảm căng thẳng hoặc lo lắng về tài chính + submit: Tiếp theo + trial: + title: Dùng thử Sure trong 45 ngày + data_deletion: Dữ liệu sẽ bị xóa sau đó + description_html: Bắt đầu từ hôm nay bạn có thể trải nghiệm sản phẩm.
Nếu thích, hãy tự lưu trữ hoặc đóng góp để tiếp tục sử dụng tại đây. + try_button: Dùng thử Sure trong 45 ngày + continue_trial: Tiếp tục dùng thử + upgrade: Nâng cấp + how_it_works: Cách hoạt động ở đây + today: Hôm nay + today_description: Bạn sẽ được truy cập miễn phí Sure trong 45 ngày trên AWS của chúng tôi. + in_40_days: Sau 40 ngày (%{date}) + in_40_days_description: Chúng tôi sẽ thông báo để nhắc bạn xuất dữ liệu. + in_45_days: Sau 45 ngày (%{date}) + in_45_days_description: Chúng tôi xóa dữ liệu của bạn — hãy đóng góp để tiếp tục sử dụng Sure tại đây! diff --git a/config/locales/views/other_assets/vi.yml b/config/locales/views/other_assets/vi.yml new file mode 100644 index 000000000..d701b4c77 --- /dev/null +++ b/config/locales/views/other_assets/vi.yml @@ -0,0 +1,9 @@ +--- +vi: + other_assets: + edit: + edit: Chỉnh sửa %{account} + balance_tracking_info: "Tài sản khác được theo dõi thông qua định giá thủ công bằng 'Số dư mới', không phải giao dịch. Dòng tiền sẽ không ảnh hưởng đến số dư tài khoản." + new: + title: Nhập thông tin tài sản + balance_tracking_info: "Tài sản khác được theo dõi thông qua định giá thủ công bằng 'Số dư mới', không phải giao dịch. Dòng tiền sẽ không ảnh hưởng đến số dư tài khoản." diff --git a/config/locales/views/other_liabilities/vi.yml b/config/locales/views/other_liabilities/vi.yml new file mode 100644 index 000000000..f67eb58f5 --- /dev/null +++ b/config/locales/views/other_liabilities/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + other_liabilities: + edit: + edit: Chỉnh sửa %{account} + new: + title: Nhập thông tin nợ phải trả diff --git a/config/locales/views/pages/vi.yml b/config/locales/views/pages/vi.yml new file mode 100644 index 000000000..881e6962a --- /dev/null +++ b/config/locales/views/pages/vi.yml @@ -0,0 +1,92 @@ +--- +vi: + pages: + feedback: + title: Phản hồi + heading: Để lại phản hồi + description: Hãy cho chúng tôi biết nếu bạn có bất kỳ phản hồi cụ thể nào. Bạn có thể đính kèm liên kết đến video hoặc ảnh chụp màn hình. + feature_request: Gửi yêu cầu tính năng + bug_report: Báo cáo lỗi + discuss: "Thảo luận về %{product} với người khác" + intro: + not_authorized: "Trang giới thiệu chỉ dành cho khách." + welcome: "Chào mừng!" + coming_soon: Trải nghiệm giới thiệu sắp ra mắt + description: "Chúng tôi đang xây dựng hành trình đăng ký phong phú hơn để tìm hiểu về mục tiêu, cột mốc và nhu cầu hàng ngày của bạn. Hiện tại, hãy chuyển đến thanh trò chuyện bên cạnh để bắt đầu cuộc trò chuyện với Sure và cho chúng tôi biết bạn đang ở đâu trong hành trình tài chính của mình." + start_chatting: Bắt đầu trò chuyện + redis_configuration_error: + page_title: Yêu cầu cấu hình Redis - Sure + heading: Yêu cầu cấu hình Redis + subheading: Cài đặt Sure tự lưu trữ của bạn cần Redis được cấu hình đúng cách. + why_required_title: Tại sao Redis là bắt buộc? + why_required_body: Sure sử dụng Redis để hỗ trợ các công việc nền Sidekiq cho các tác vụ như đồng bộ dữ liệu tài khoản, xử lý nhập khẩu và các hoạt động nền khác giúp dữ liệu tài chính của bạn luôn cập nhật. + view_setup_guide: Xem hướng dẫn cài đặt + setup_guide_hint: Làm theo hướng dẫn cài đặt Docker đầy đủ để cấu hình Redis + refresh_hint: "Sau khi bạn đã cấu hình Redis, hãy làm mới trang này để tiếp tục." + refresh_page: Làm mới trang + changelog: + title: Có gì mới + privacy: + title: Chính sách bảo mật + heading: Chính sách bảo mật + placeholder: Nội dung chính sách bảo mật sẽ được hiển thị ở đây. + terms: + title: Điều khoản dịch vụ + heading: Điều khoản dịch vụ + placeholder: Nội dung điều khoản dịch vụ sẽ được hiển thị ở đây. + dashboard: + welcome: "Chào mừng trở lại, %{name}" + subtitle: "Đây là tình hình tài chính của bạn" + new: "Mới" + drag_to_reorder: "Kéo để sắp xếp lại phần" + toggle_section: "Bật/tắt hiển thị phần" + net_worth_chart: + data_not_available: Dữ liệu không khả dụng cho khoảng thời gian đã chọn + title: Tài sản ròng + no_account_empty_state: + new_account: Tài khoản mới + no_account_subtitle: Vì chưa có tài khoản nào được thêm vào, không có dữ liệu để hiển thị. Thêm tài khoản đầu tiên của bạn để bắt đầu xem dữ liệu bảng điều khiển. + no_account_title: Chưa có tài khoản nào + balance_sheet: + title: "Bảng cân đối" + no_items: "Chưa có %{name} nào" + add_accounts: "Thêm tài khoản %{name} của bạn để xem phân tích đầy đủ" + no_asset: "Chưa có tài sản nào" + no_liability: "Chưa có nợ phải trả nào" + add_asset_accounts: "Thêm tài khoản tài sản của bạn để xem phân tích đầy đủ" + add_liability_accounts: "Thêm tài khoản nợ phải trả của bạn để xem phân tích đầy đủ" + name: "Tên" + weight: "Tỷ trọng" + value: "Giá trị" + classifications: + asset: "Tài sản" + liability: "Nợ phải trả" + cashflow_sankey: + title: "Dòng tiền" + zoom_out: "Quay lại toàn bộ dòng tiền" + no_data_title: "Không có dữ liệu dòng tiền cho khoảng thời gian này" + no_data_description: "Thêm giao dịch để hiển thị dữ liệu dòng tiền hoặc mở rộng khoảng thời gian" + add_transaction: "Thêm giao dịch" + no_accounts: + title: "Chưa có tài khoản nào" + description: "Thêm tài khoản để hiển thị dữ liệu tài sản ròng" + add_account: "Thêm tài khoản" + outflows_donut: + title: "Chi tiêu" + total_outflows: "Tổng chi tiêu" + categories: "Danh mục" + value: "Giá trị" + weight: "Tỷ trọng" + investment_summary: + title: "Đầu tư" + total_return: "Tổng lợi nhuận" + holding: "Danh mục nắm giữ" + weight: "Tỷ trọng" + value: "Giá trị" + return: "Lợi nhuận" + period_activity: "Hoạt động %{period}" + contributions: "Đóng góp" + withdrawals: "Rút tiền" + trades: "Giao dịch" + no_investments: "Không có tài khoản đầu tư" + add_investment: "Thêm tài khoản đầu tư để theo dõi danh mục của bạn" diff --git a/config/locales/views/password_mailer/vi.yml b/config/locales/views/password_mailer/vi.yml new file mode 100644 index 000000000..3108ffc08 --- /dev/null +++ b/config/locales/views/password_mailer/vi.yml @@ -0,0 +1,8 @@ +--- +vi: + password_mailer: + password_reset: + cta: Đặt lại mật khẩu của bạn + ignore_if_not_requested: Nếu bạn không thực hiện yêu cầu này, bạn có thể bỏ qua email này. + request_made: Một yêu cầu đã được thực hiện để đặt lại mật khẩu %{product_name} của bạn. Nhấp vào liên kết để đặt lại. + subject: '%{product_name}: Đặt lại mật khẩu của bạn' diff --git a/config/locales/views/password_resets/vi.yml b/config/locales/views/password_resets/vi.yml new file mode 100644 index 000000000..7564d9eac --- /dev/null +++ b/config/locales/views/password_resets/vi.yml @@ -0,0 +1,15 @@ +--- +vi: + password_resets: + disabled: Đặt lại mật khẩu qua Sure đã bị tắt. Vui lòng đặt lại mật khẩu của bạn thông qua nhà cung cấp danh tính. + sso_only_user: Tài khoản của bạn sử dụng SSO để xác thực. Vui lòng liên hệ với quản trị viên để quản lý thông tin đăng nhập của bạn. + edit: + title: Đặt lại mật khẩu + new: + requested: Vui lòng kiểm tra email của bạn để nhận liên kết đặt lại mật khẩu. + submit: Đặt lại mật khẩu + title: Đặt lại mật khẩu + back: Quay lại + update: + invalid_token: Token không hợp lệ. + success: Mật khẩu của bạn đã được đặt lại. diff --git a/config/locales/views/passwords/vi.yml b/config/locales/views/passwords/vi.yml new file mode 100644 index 000000000..430204ad9 --- /dev/null +++ b/config/locales/views/passwords/vi.yml @@ -0,0 +1,10 @@ +--- +vi: + passwords: + edit: + password: Mật khẩu mới + password_challenge: Mật khẩu hiện tại + submit: Đặt lại mật khẩu + title: Cập nhật mật khẩu + update: + success: Mật khẩu của bạn đã được đặt lại. diff --git a/config/locales/views/pdf_import_mailer/vi.yml b/config/locales/views/pdf_import_mailer/vi.yml new file mode 100644 index 000000000..6095596ce --- /dev/null +++ b/config/locales/views/pdf_import_mailer/vi.yml @@ -0,0 +1,17 @@ +--- +vi: + pdf_import_mailer: + next_steps: + greeting: "Xin chào %{name}," + intro: "Chúng tôi đã hoàn tất phân tích tài liệu PDF bạn đã tải lên %{product}." + document_type_label: Loại tài liệu + summary_label: Tóm tắt AI + transactions_note: Tài liệu này có vẻ chứa các giao dịch. Bạn có thể trích xuất và xem xét chúng ngay bây giờ. + document_stored_note: Tài liệu này đã được lưu trữ để bạn tham khảo. Nó có thể được sử dụng để cung cấp ngữ cảnh trong các cuộc trò chuyện AI trong tương lai. + next_steps_label: Tiếp theo là gì? + next_steps_intro: "Bạn có một số lựa chọn:" + option_extract_transactions: Trích xuất giao dịch từ sao kê này + option_keep_reference: Giữ tài liệu này để tham khảo trong các cuộc trò chuyện AI tương lai + option_delete: Xóa bản nhập này nếu bạn không còn cần nó nữa + view_import_button: Xem chi tiết nhập dữ liệu + footer_note: Đây là tin nhắn tự động. Vui lòng không trả lời trực tiếp email này. diff --git a/config/locales/views/pending_duplicate_merges/vi.yml b/config/locales/views/pending_duplicate_merges/vi.yml new file mode 100644 index 000000000..233075ecf --- /dev/null +++ b/config/locales/views/pending_duplicate_merges/vi.yml @@ -0,0 +1,21 @@ +--- +vi: + pending_duplicate_merges: + create: + no_posted_selected: Vui lòng chọn một giao dịch đã đăng để hợp nhất + invalid_transaction: Giao dịch được chọn để hợp nhất không hợp lệ + merge_success: Giao dịch chờ xử lý đã được hợp nhất với giao dịch đã đăng + merge_failed: Không thể hợp nhất giao dịch + set_transaction: + pending_only: Tính năng này chỉ khả dụng cho các giao dịch đang chờ xử lý + new: + title: Hợp nhất với giao dịch đã đăng + warning_title: Hợp nhất thủ công trùng lặp + warning_description: Sử dụng tính năng này để hợp nhất thủ công giao dịch đang chờ xử lý với phiên bản đã đăng của nó. Thao tác này sẽ xóa giao dịch đang chờ xử lý và chỉ giữ lại giao dịch đã đăng. + pending_transaction: Giao dịch đang chờ xử lý + select_posted: Chọn giao dịch đã đăng để hợp nhất + showing_range: "Đang hiển thị %{start} - %{end}" + previous: "← 10 trước" + next: "10 tiếp theo →" + no_candidates: Không tìm thấy giao dịch đã đăng nào trong tài khoản này. + submit_button: Hợp nhất giao dịch diff --git a/config/locales/views/plaid_items/vi.yml b/config/locales/views/plaid_items/vi.yml new file mode 100644 index 000000000..b20967d60 --- /dev/null +++ b/config/locales/views/plaid_items/vi.yml @@ -0,0 +1,34 @@ +--- +vi: + plaid_items: + create: + success: Tài khoản đã được liên kết thành công. Vui lòng chờ các tài khoản đồng bộ. + destroy: + success: Các tài khoản đã được lên lịch xóa. + plaid_item: + add_new: Thêm kết nối mới + confirm_accept: Xóa tổ chức tài chính + confirm_body: Thao tác này sẽ xóa vĩnh viễn tất cả tài khoản trong nhóm này và tất cả dữ liệu liên quan. + confirm_title: Xóa tổ chức tài chính? + connection_lost: Mất kết nối + connection_lost_description: Kết nối này không còn hợp lệ. Bạn cần xóa kết nối này và thêm lại để tiếp tục đồng bộ dữ liệu. + delete: Xóa + deletion_in_progress: (đang xóa...) + error: Đã xảy ra lỗi khi đồng bộ dữ liệu + no_accounts_description: Chúng tôi không thể tải bất kỳ tài khoản nào từ tổ chức tài chính này. + no_accounts_title: Không tìm thấy tài khoản + requires_update: Kết nối lại + status: Đồng bộ lần cuối %{timestamp} trước + status_never: Cần đồng bộ dữ liệu + syncing: Đang đồng bộ... + update: Cập nhật + select_existing_account: + no_available_accounts: Không có tài khoản Plaid nào để liên kết. Vui lòng kết nối tài khoản Plaid mới trước. + title: "Liên kết %{account_name} với Plaid" + description: Chọn tài khoản Plaid để liên kết với tài khoản hiện có của bạn + cancel: Hủy + link_account: Liên kết tài khoản + link_existing_account: + invalid_account: Tài khoản Plaid được chọn không hợp lệ + already_linked: Tài khoản Plaid này đã được liên kết + success: Tài khoản đã được liên kết thành công với Plaid diff --git a/config/locales/views/preview/vi.yml b/config/locales/views/preview/vi.yml new file mode 100644 index 000000000..c71ad0dc3 --- /dev/null +++ b/config/locales/views/preview/vi.yml @@ -0,0 +1,4 @@ +--- +vi: + preview: + not_enabled: Tính năng này đang ở chế độ xem trước. Bật tính năng xem trước trong Cài đặt → Tùy chọn để dùng thử. diff --git a/config/locales/views/properties/vi.yml b/config/locales/views/properties/vi.yml new file mode 100644 index 000000000..dbf85af1b --- /dev/null +++ b/config/locales/views/properties/vi.yml @@ -0,0 +1,89 @@ +--- +vi: + properties: + edit: + edit: Chỉnh sửa %{account} + form: + address_line1: Địa chỉ đường phố + address_line1_placeholder: 123 Main St + area: Diện tích sử dụng + area_placeholder: '2000' + area_unit: Đơn vị đo lường + country: Quốc gia + country_placeholder: US + locality: Thành phố + locality_placeholder: San Francisco + none: Không có + postal_code: Mã bưu điện + postal_code_placeholder: '94105' + region: Tỉnh/Bang + region_placeholder: CA + subtype_prompt: Chọn loại bất động sản + year_built: Năm xây dựng + year_built_placeholder: '2000' + new: + title: Nhập bất động sản thủ công + next: "Tiếp theo" + address: + title: "Nhập bất động sản thủ công" + address_line1_label: "Địa chỉ dòng 1" + address_line1_placeholder: "123 Main Street" + city_label: "Thành phố" + city_placeholder: "San Francisco" + state_region_label: "Tỉnh/Bang" + state_region_placeholder: "CA" + postal_code_label: "Mã bưu điện" + postal_code_placeholder: "12345" + country_label: "Quốc gia" + country_placeholder: "USA" + save: "Lưu" + balances: + title: "Nhập bất động sản thủ công" + market_value_label: "Giá trị thị trường ước tính" + market_value_tooltip: "Giá trị thị trường ước tính của bất động sản. Con số này thường có thể tìm thấy trên các trang như Zillow hoặc Redfin và không bao giờ là con số chính xác." + save: "Lưu" + next: "Tiếp theo" + overview_fields: + name_label: "Tên" + name_placeholder: "Nhà nghỉ dưỡng" + subtype_prompt: "Chọn loại" + property_type_label: "Loại bất động sản" + year_built_label: "Năm xây dựng (tùy chọn)" + year_built_placeholder: "1990" + area_label: "Diện tích (tùy chọn)" + area_placeholder: "1200" + square_feet: "Feet vuông" + square_meters: "Mét vuông" + area_unit_label: "Đơn vị diện tích" + overview: + living_area: Diện tích sử dụng + market_value: Giá trị thị trường + purchase_price: Giá mua + trend: Xu hướng + unknown: Không xác định + year_built: Năm xây dựng + tabs: + overview: + living_area: Diện tích sử dụng + market_value: Giá trị thị trường + purchase_price: Giá mua + trend: Xu hướng + unknown: Không xác định + year_built: Năm xây dựng + edit_account_details: "Chỉnh sửa thông tin tài khoản" + subtypes: + apartment: + short: Căn hộ + long: Căn hộ + plot: + short: Lô đất + long: Lô đất / Đất đai + commercial: + short: Thương mại + long: Bất động sản thương mại + rented: + short: Cho thuê + long: Bất động sản cho thuê + agri_land: + short: Đất nông nghiệp + long: Đất nông nghiệp diff --git a/config/locales/views/recurring_transactions/vi.yml b/config/locales/views/recurring_transactions/vi.yml new file mode 100644 index 000000000..f4b851669 --- /dev/null +++ b/config/locales/views/recurring_transactions/vi.yml @@ -0,0 +1,56 @@ +--- +vi: + recurring_transactions: + title: Giao dịch định kỳ + upcoming: Giao dịch định kỳ sắp tới + projected: Dự kiến + recurring: Định kỳ + expected_today: "Dự kiến hôm nay" + expected_in: + one: "Dự kiến sau %{count} ngày" + other: "Dự kiến sau %{count} ngày" + day_of_month: Ngày %{day} hàng tháng + identify_patterns: Xác định mẫu + cleanup_stale: Dọn dẹp mẫu cũ + settings: + enable_label: Bật giao dịch định kỳ + enable_description: Tự động phát hiện mẫu giao dịch định kỳ và hiển thị các giao dịch dự kiến sắp tới. + settings_updated: Đã cập nhật cài đặt giao dịch định kỳ + info: + title: Tự động phát hiện mẫu + manual_description: Bạn có thể tự tay xác định mẫu hoặc dọn dẹp giao dịch định kỳ cũ bằng các nút ở trên. + automatic_description: "Nhận dạng tự động cũng chạy sau:" + triggers: + - Nhập CSV hoàn tất (giao dịch, giao dịch chứng khoán, tài khoản, v.v.) + - Bất kỳ lần đồng bộ nhà cung cấp nào hoàn tất (Plaid, SimpleFIN, v.v.) + identified: Đã xác định %{count} mẫu giao dịch định kỳ + cleaned_up: Đã dọn dẹp %{count} giao dịch định kỳ cũ + marked_inactive: Giao dịch định kỳ đã được đánh dấu không hoạt động + marked_active: Giao dịch định kỳ đã được đánh dấu hoạt động + deleted: Đã xóa giao dịch định kỳ + confirm_delete: Bạn có chắc muốn xóa giao dịch định kỳ này? + marked_as_recurring: Giao dịch đã được đánh dấu là định kỳ + already_exists: Đã tồn tại giao dịch định kỳ thủ công cho mẫu này + creation_failed: Không thể tạo giao dịch định kỳ. Vui lòng kiểm tra thông tin giao dịch và thử lại. + unexpected_error: Đã xảy ra lỗi không mong muốn khi tạo giao dịch định kỳ + amount_range: "Khoảng: %{min} đến %{max}" + empty: + title: Không tìm thấy giao dịch định kỳ + description: Nhấn "Xác định mẫu" để tự động phát hiện giao dịch định kỳ từ lịch sử giao dịch. + table: + merchant: Tên + amount: Số tiền + expected_day: Ngày dự kiến + next_date: Ngày tiếp theo + last_occurrence: Lần xuất hiện gần nhất + status: Trạng thái + actions: Hành động + status: + active: Hoạt động + inactive: Không hoạt động + badges: + manual: Thủ công + transfer_marked_as_recurring: Chuyển khoản đã được đánh dấu là định kỳ + transfer_already_exists: Đã tồn tại chuyển khoản định kỳ cho cặp tài khoản này + transfer_creation_failed: Không thể tạo chuyển khoản định kỳ. Vui lòng kiểm tra thông tin và thử lại. + transfer_feature_disabled: Chuyển khoản định kỳ đã bị tắt cho hộ gia đình này diff --git a/config/locales/views/registrations/vi.yml b/config/locales/views/registrations/vi.yml new file mode 100644 index 000000000..a9402ee44 --- /dev/null +++ b/config/locales/views/registrations/vi.yml @@ -0,0 +1,31 @@ +--- +vi: + helpers: + label: + user: + invite_code: Mã mời + submit: + user: + create: Tiếp tục + registrations: + closed: Đăng ký hiện đang đóng. + create: + failure: Đã xảy ra lỗi khi đăng ký. + invalid_invite_code: Mã mời không hợp lệ, vui lòng thử lại. + success: Bạn đã đăng ký thành công. + new: + invitation_message: "%{inviter} đã mời bạn tham gia với vai trò %{role}" + join_family_title: Tham gia %{family} %{moniker} + role_admin: quản trị viên + role_guest: khách + role_member: thành viên + submit: Tạo tài khoản + title: Tạo tài khoản của bạn + welcome_body: Để bắt đầu, bạn cần đăng ký tài khoản mới. Sau đó bạn có thể cấu hình các cài đặt bổ sung trong ứng dụng. + welcome_title: Chào mừng đến với %{product_name} tự lưu trữ! + password_placeholder: Nhập mật khẩu của bạn + password_requirements: + length: Tối thiểu 8 ký tự + case: Chữ hoa và chữ thường + number: Một chữ số (0-9) + special: "Một ký tự đặc biệt (!, @, #, $, %, v.v.)" diff --git a/config/locales/views/reports/vi.yml b/config/locales/views/reports/vi.yml new file mode 100644 index 000000000..e4a0e7f25 --- /dev/null +++ b/config/locales/views/reports/vi.yml @@ -0,0 +1,242 @@ +--- +vi: + reports: + index: + title: Báo cáo + subtitle: Thông tin chi tiết toàn diện về sức khỏe tài chính của bạn + export: Xuất CSV + print_report: In báo cáo + drag_to_reorder: "Kéo để sắp xếp lại phần" + toggle_section: "Bật/tắt hiển thị phần" + periods: + monthly: Hàng tháng + quarterly: Hàng quý + ytd: Từ đầu năm + last_6_months: 6 Tháng Qua + custom: Khoảng tùy chỉnh + date_range: + from: Từ + to: Đến + showing_period: "Hiển thị dữ liệu từ %{start} đến %{end}" + previous_period: "Kỳ trước" + next_period: "Kỳ tiếp" + today: "Hôm nay" + period_label: + quarterly: "Q%{quarter} %{year}" + ytd: "Từ đầu năm %{year}" + past_year: "%{year}" + last_6_months: "%{start} – %{end}" + period_picker: + quarter: "Q%{quarter} %{year}" + ytd: "Từ đầu năm %{year}" + previous_year: "Năm trước" + next_year: "Năm tiếp" + previous_decade: "Thập kỷ trước" + next_decade: "Thập kỷ tiếp" + invalid_date_range: "Ngày kết thúc không thể trước ngày bắt đầu. Các ngày đã được hoán đổi." + summary: + total_income: Tổng thu nhập + total_expenses: Tổng chi tiêu + net_savings: Tiết kiệm thuần + budget_performance: Hiệu suất ngân sách + vs_previous: so với kỳ trước + income_minus_expenses: Thu nhập trừ chi tiêu + of_budget_used: ngân sách đã dùng + no_budget_data: Không có dữ liệu ngân sách cho kỳ này + budget_performance: + title: Hiệu suất ngân sách + spent: Đã chi + budgeted: Ngân sách + remaining: Còn lại + over_by: Vượt + shared: chia sẻ + suggested_daily: "%{amount} đề xuất mỗi ngày cho %{days} ngày còn lại" + no_budgets: Chưa thiết lập danh mục ngân sách tháng này + status: + good: Đúng kế hoạch + warning: Gần giới hạn + over: Vượt ngân sách + trends: + title: Xu hướng & Thông tin + monthly_breakdown: Phân tích hàng tháng + month: Tháng + income: Thu nhập + expenses: Chi tiêu + net: Thuần + savings_rate: Tỷ lệ tiết kiệm + current: hiện tại + avg_monthly_income: Thu nhập tb hàng tháng + avg_monthly_expenses: Chi tiêu tb hàng tháng + avg_monthly_savings: Tiết kiệm tb hàng tháng + no_data: Không có dữ liệu xu hướng + spending_patterns: Mô hình chi tiêu + weekday_spending: Chi tiêu ngày thường + weekend_spending: Chi tiêu cuối tuần + total: Tổng + avg_per_transaction: Tb mỗi giao dịch + transactions: Giao dịch + insight_title: Thông tin + insight_higher_weekend: "Bạn chi %{percent}% nhiều hơn mỗi giao dịch vào cuối tuần so với ngày thường" + insight_higher_weekday: "Bạn chi %{percent}% nhiều hơn mỗi giao dịch vào ngày thường so với cuối tuần" + insight_similar: "Chi tiêu mỗi giao dịch của bạn tương tự vào ngày thường và cuối tuần" + no_spending_data: Không có dữ liệu chi tiêu cho kỳ này + empty_state: + title: Không có dữ liệu + description: Bắt đầu theo dõi tài chính bằng cách thêm giao dịch hoặc kết nối tài khoản để xem báo cáo toàn diện + add_transaction: Thêm giao dịch + add_account: Thêm tài khoản + transactions_breakdown: + title: Phân tích hoạt động + no_transactions: Không tìm thấy hoạt động cho kỳ và bộ lọc đã chọn + filters: + title: Bộ lọc + category: Danh mục + account: Tài khoản + tag: Nhãn + amount_min: Số tiền tối thiểu + amount_max: Số tiền tối đa + date_range: Khoảng ngày + all_categories: Tất cả danh mục + all_accounts: Tất cả tài khoản + all_tags: Tất cả nhãn + apply: Áp dụng bộ lọc + clear: Xóa bộ lọc + sort: + label: Sắp xếp theo + date_desc: Ngày (Mới nhất) + amount_desc: Số tiền (Cao đến Thấp) + amount_asc: Số tiền (Thấp đến Cao) + export: + label: Xuất + csv: CSV + excel: Excel + pdf: PDF + google_sheets: Mở trong Google Sheets + table: + category: Danh mục + amount: Số tiền + type: Loại + expense: Chi tiêu + income: Thu nhập + uncategorized: Chưa phân loại + entries: + one: "%{count} mục" + other: "%{count} mục" + percentage: "% Tổng" + pagination: + showing: + one: Hiển thị %{count} mục + other: Hiển thị %{count} mục + previous: Trước + next: Tiếp + net_worth: + title: Tài sản ròng + current_net_worth: Tài sản ròng hiện tại + period_change: Thay đổi trong kỳ + assets_vs_liabilities: Tài sản vs Nợ + total_assets: Tài sản + total_liabilities: Nợ + no_assets: Không có tài sản + no_liabilities: Không có nợ + investment_performance: + title: Hiệu suất đầu tư + portfolio_value: Giá trị danh mục + total_return: Tổng lợi nhuận + contributions: Đóng góp trong kỳ + withdrawals: Rút tiền trong kỳ + top_holdings: Danh mục nắm giữ hàng đầu + holding: Nắm giữ + weight: Tỷ trọng + value: Giá trị + return: Lợi nhuận + accounts: Tài khoản đầu tư + gains_by_tax_treatment: Lợi nhuận theo loại thuế + unrealized_gains: Lợi nhuận chưa thực hiện + realized_gains: Lợi nhuận đã thực hiện + total_gains: Tổng lợi nhuận + taxable_realized_note: Các khoản lợi nhuận này có thể phải chịu thuế + no_data: "-" + view_details: Xem chi tiết + holdings_count: + one: "%{count} nắm giữ" + other: "%{count} nắm giữ" + sells_count: + one: "%{count} lần bán" + other: "%{count} lần bán" + holdings: Danh mục nắm giữ + sell_trades: Giao dịch bán + and_more: "+%{count} khác" + investment_flows: + title: Dòng tiền đầu tư + description: Theo dõi tiền chảy vào và ra khỏi tài khoản đầu tư qua đóng góp và rút tiền. + contributions: Đóng góp + contributions_description: Tiền thêm vào đầu tư + withdrawals: Rút tiền + withdrawals_description: Tiền rút từ đầu tư + net_flow: Dòng tiền thuần + net_flow_description: Tổng thay đổi thuần + google_sheets_instructions: + title_with_key: "✅ Sao chép URL cho Google Sheets" + title_no_key: "⚠️ Cần khóa API" + ready: URL CSV (kèm khóa API) đã sẵn sàng. + steps: "Để nhập vào Google Sheets:\n1. Tạo Google Sheet mới\n2. Trong ô A1, nhập công thức bên dưới\n3. Nhấn Enter" + security_warning: "URL này chứa khóa API của bạn. Hãy giữ bí mật!" + need_key: Để nhập dữ liệu vào Google Sheets, bạn cần khóa API. + step1: "Vào Cài đặt → Khóa API" + step2: "Tạo khóa API mới với quyền \"đọc\"" + step3: Sao chép khóa API + step4: "Thêm vào URL như sau: ?api_key=YOUR_KEY" + example: Ví dụ + then_use: Sau đó dùng URL đầy đủ với =IMPORTDATA() trong Google Sheets. + open_sheets: Mở Google Sheets + go_to_api_keys: Đến Khóa API + close: Đã hiểu + print: + document_title: Báo cáo tài chính + title: Báo cáo tài chính + generated_on: "Tạo ngày %{date}" + summary: + title: Tóm tắt + income: Thu nhập + expenses: Chi tiêu + net_savings: Tiết kiệm thuần + budget: Ngân sách + vs_prior: "%{percent}% so với kỳ trước" + of_income: "%{percent}% thu nhập" + used: đã dùng + net_worth: + title: Tài sản ròng + current_balance: Số dư hiện tại + this_period: kỳ này + assets: Tài sản + liabilities: Nợ + no_liabilities: Không có nợ + trends: + title: Xu hướng hàng tháng + month: Tháng + income: Thu nhập + expenses: Chi tiêu + net: Thuần + savings_rate: Tỷ lệ tiết kiệm + average: Trung bình + current_month_note: "* Tháng hiện tại (dữ liệu một phần)" + investments: + title: Đầu tư + portfolio_value: Giá trị danh mục + total_return: Tổng lợi nhuận + contributions: Đóng góp + withdrawals: Rút tiền + this_period: kỳ này + top_holdings: Danh mục nắm giữ hàng đầu + holding: Nắm giữ + weight: Tỷ trọng + value: Giá trị + return: Lợi nhuận + spending: + title: Chi tiêu theo danh mục + income: Thu nhập + expenses: Chi tiêu + category: Danh mục + amount: Số tiền + percent: "%" + more_categories: "+ %{count} danh mục khác" diff --git a/config/locales/views/rules/vi.yml b/config/locales/views/rules/vi.yml new file mode 100644 index 000000000..859b488ef --- /dev/null +++ b/config/locales/views/rules/vi.yml @@ -0,0 +1,115 @@ +--- +vi: + rules: + no_action: Không có hành động + no_condition: Không có điều kiện + rule: + edit: Chỉnh sửa + re_apply_rule: Áp dụng lại quy tắc + delete: Xóa + then: THÌ + and_more_conditions: + one: và 1 điều kiện nữa + other: và %{count} điều kiện nữa + and_more_actions: + one: và 1 hành động nữa + other: và %{count} hành động nữa + action_label_to: "%{label} thành %{value}" + all_past_and_future: Tất cả %{resource} trong quá khứ và tương lai + on_or_after: "%{resource} từ ngày %{date} trở đi" + form: + rule_name_label: Tên quy tắc (tùy chọn) + rule_name_placeholder: Nhập tên cho quy tắc này + add_condition: Thêm điều kiện + add_condition_group: Thêm nhóm điều kiện + add_action: Thêm hành động + all_past_and_future: Tất cả %{resource} trong quá khứ và tương lai + starting_from: Bắt đầu từ + then: THÌ + index: + page_title: Quy tắc + delete_all_rules: Xóa tất cả quy tắc + new_rule: Quy tắc mới + ai_cost_warning: Các hành động quy tắc sử dụng AI sẽ tốn chi phí. Hãy lọc càng hẹp càng tốt để tránh chi phí không cần thiết. + rules_heading: Quy tắc + sort_by: "Sắp xếp theo:" + sort_name: Tên + sort_updated_at: Ngày cập nhật + toggle_sort_direction: Đổi chiều sắp xếp + no_rules_title: Chưa có quy tắc + no_rules_description: Thiết lập quy tắc để thực hiện hành động trên giao dịch và dữ liệu khác mỗi lần đồng bộ tài khoản. + confirm: + title: Xác nhận thay đổi + title_with_name: "Xác nhận thay đổi cho \"%{name}\"" + apply_notice_html: "Bạn sắp áp dụng quy tắc này cho %{count} %{resource} đáp ứng tiêu chí quy tắc đã chỉ định. Vui lòng xác nhận nếu muốn tiếp tục." + ai_cost_title: Ước tính chi phí AI + ai_cost_with_estimate_html: "Sẽ dùng AI để phân loại %{count} giao dịch. Chi phí ước tính: ~$%{cost}" + ai_cost_no_estimate_html: "Sẽ dùng AI để phân loại %{count} giao dịch." + cost_unavailable_model: "Không thể ước tính chi phí cho mô hình \"%{model}\"." + cost_unavailable_no_provider: Không thể ước tính chi phí (chưa cấu hình nhà cung cấp LLM). + cost_warning: Bạn có thể phát sinh chi phí, hãy kiểm tra với nhà cung cấp mô hình để biết giá mới nhất. + view_usage_history: Xem lịch sử sử dụng + confirm_changes: Xác nhận thay đổi + actions: + value_placeholder: Nhập một giá trị + update: + success: Đã cập nhật quy tắc + destroy: + success: Đã xóa quy tắc + destroy_all: + success: Đã xóa tất cả quy tắc + apply_all: + button: Áp dụng tất cả + confirm_title: Áp dụng tất cả quy tắc + confirm_message: Bạn sắp áp dụng %{count} quy tắc ảnh hưởng đến %{transactions} giao dịch duy nhất. Vui lòng xác nhận nếu muốn tiếp tục. + confirm_button: Xác nhận và áp dụng tất cả + success: Tất cả quy tắc đã được đưa vào hàng chờ thực thi + ai_cost_title: Ước tính chi phí AI + ai_cost_message: Sẽ dùng AI để phân loại tối đa %{transactions} giao dịch. + estimated_cost: "Chi phí ước tính: ~$%{cost}" + cost_unavailable_model: Không thể ước tính chi phí cho mô hình "%{model}". + cost_unavailable_no_provider: Không thể ước tính chi phí (chưa cấu hình nhà cung cấp LLM). + cost_warning: Bạn có thể phát sinh chi phí, hãy kiểm tra với nhà cung cấp mô hình để biết giá mới nhất. + view_usage: Xem lịch sử sử dụng + recent_runs: + title: Lần chạy gần đây + description: Xem lịch sử thực thi quy tắc bao gồm trạng thái thành công/thất bại và số lượng giao dịch. + unnamed_rule: Quy tắc chưa đặt tên + columns: + date_time: Ngày/Giờ + execution_type: Loại + status: Trạng thái + rule_name: Tên quy tắc + transactions_counts: + queued: Đang chờ + processed: Đã xử lý + modified: Đã sửa đổi + blocked: Bị chặn + execution_types: + manual: Thủ công + scheduled: Đã lên lịch + statuses: + pending: Đang chờ + success: Thành công + failed: Thất bại + clear_ai_cache: + button: Đặt lại bộ nhớ đệm AI + confirm_title: Đặt lại bộ nhớ đệm AI? + confirm_body: Bạn có chắc muốn đặt lại bộ nhớ đệm AI? Điều này cho phép các quy tắc AI xử lý lại tất cả giao dịch và có thể phát sinh thêm chi phí API. + confirm_button: Đặt lại bộ nhớ đệm + success: Bộ nhớ đệm AI đang được xóa. Quá trình này có thể mất vài giây. + condition_filters: + transaction_type: + income: Thu nhập + expense: Chi tiêu + transfer: Chuyển khoản + equal_to: Bằng + rule: + conditions: + condition_group: + and_prefix: và + match: khớp + all: tất cả + any: bất kỳ + of_the_following_conditions: trong các điều kiện sau + add_condition: Thêm điều kiện diff --git a/config/locales/views/securities/vi.yml b/config/locales/views/securities/vi.yml new file mode 100644 index 000000000..5f15d5fac --- /dev/null +++ b/config/locales/views/securities/vi.yml @@ -0,0 +1,14 @@ +--- +vi: + securities: + combobox: + display: "%{symbol} - %{name} (%{exchange})" + exchange_label: "%{symbol} (%{exchange})" + providers: + twelve_data: Twelve Data + yahoo_finance: Yahoo Finance + tiingo: Tiingo + eodhd: EODHD + alpha_vantage: Alpha Vantage + mfapi: MFAPI.in + binance_public: Binance diff --git a/config/locales/views/sessions/vi.yml b/config/locales/views/sessions/vi.yml new file mode 100644 index 000000000..50d9c9175 --- /dev/null +++ b/config/locales/views/sessions/vi.yml @@ -0,0 +1,35 @@ +--- +vi: + sessions: + create: + invalid_credentials: Email hoặc mật khẩu không đúng. + local_login_disabled: Đăng nhập bằng mật khẩu nội bộ đã bị tắt. Vui lòng sử dụng đăng nhập một lần (SSO). + destroy: + logout_successful: Bạn đã đăng xuất thành công. + post_logout: + logout_successful: Bạn đã đăng xuất thành công. + openid_connect: + account_linked: "Tài khoản đã được liên kết thành công với %{provider}" + failed: Không thể xác thực qua OpenID Connect. + failure: + failed: Không thể xác thực. + sso_provider_unavailable: "Nhà cung cấp SSO hiện không khả dụng. Vui lòng thử lại sau hoặc liên hệ quản trị viên." + sso_invalid_response: "Nhận được phản hồi không hợp lệ từ nhà cung cấp SSO. Vui lòng thử lại." + sso_failed: "Xác thực SSO thất bại. Vui lòng thử lại." + mobile_sso_start: + redirecting_html: "Đang chuyển hướng để đăng nhập... Nhấn vào đây nếu không được chuyển hướng." + new: + email: Địa chỉ email + email_placeholder: ban@example.com + forgot_password: Quên mật khẩu? + password: Mật khẩu + submit: Đăng nhập + title: Sure + password_placeholder: Nhập mật khẩu của bạn + openid_connect: Đăng nhập với OpenID Connect + oidc: Đăng nhập với OpenID Connect + google_auth_connect: Đăng nhập với Google + local_login_admin_only: Đăng nhập nội bộ chỉ dành cho quản trị viên. + no_auth_methods_enabled: Hiện chưa có phương thức xác thực nào được bật. Vui lòng liên hệ quản trị viên. + demo_banner_title: "Chế độ Demo đang hoạt động" + demo_banner_message: "Đây là môi trường minh họa. Thông tin đăng nhập đã được điền sẵn để tiện sử dụng. Vui lòng không nhập thông tin thật hoặc nhạy cảm." diff --git a/config/locales/views/settings/api_keys/vi.yml b/config/locales/views/settings/api_keys/vi.yml new file mode 100644 index 000000000..2920fb9e7 --- /dev/null +++ b/config/locales/views/settings/api_keys/vi.yml @@ -0,0 +1,115 @@ +--- +vi: + settings: + api_keys_controller: + success: "Khóa API của bạn đã được tạo thành công" + revoked_successfully: "Khóa API đã được thu hồi thành công" + revoke_failed: "Thu hồi khóa API thất bại" + scope_descriptions: + read_accounts: "Xem tài khoản" + read_transactions: "Xem giao dịch" + read_balances: "Xem số dư" + write_transactions: "Tạo giao dịch" + api_keys: + create: + success: "Khóa API của bạn đã được tạo thành công" + destroy: + not_found: "Không tìm thấy khóa API" + cannot_revoke: "Không thể thu hồi khóa API này" + revoked_successfully: "Khóa API đã được thu hồi thành công" + revoke_failed: "Thu hồi khóa API thất bại" + show: + title: "Quản lý khóa API" + no_api_key: + title: "Khóa API" + heading: "Truy cập dữ liệu tài khoản theo chương trình" + description: "Nhận quyền truy cập theo chương trình vào dữ liệu Sure của bạn với khóa API bảo mật." + what_you_can_do: "Những gì bạn có thể làm với API:" + feature_1: "Truy cập dữ liệu tài khoản theo chương trình" + feature_2: "Xây dựng tích hợp và ứng dụng tùy chỉnh" + feature_3: "Tự động truy xuất và phân tích dữ liệu" + security_note_title: "Bảo mật là ưu tiên hàng đầu" + security_note: "Khóa API của bạn sẽ có quyền hạn chế dựa trên các phạm vi bạn chọn. Bạn chỉ có thể có một khóa API đang hoạt động tại một thời điểm." + create_api_key: "Tạo khóa API" + newly_created: + page_title: "Khóa API đã được tạo thành công" + heading: "Khóa API đã được tạo thành công!" + key_ready: "Khóa API mới \"%{name}\" của bạn đã được tạo và sẵn sàng sử dụng." + your_api_key: "Khóa API của bạn" + copy_store_securely: "Sao chép và lưu trữ khóa này an toàn. Bạn sẽ cần nó để xác thực các yêu cầu API." + copy_api_key: "Sao chép khóa API" + how_to_use: "Cách sử dụng khóa API của bạn" + continue: "Tiếp tục đến Cài đặt khóa API" + current_api_key: + title: "Khóa API của bạn" + description: "Khóa API đang hoạt động của bạn sẵn sàng sử dụng. Giữ nó an toàn và không bao giờ chia sẻ công khai." + active: "Đang hoạt động" + key_name: "Tên" + created_at: "Đã tạo" + created_ago: "Tạo %{time} trước" + last_used: "Lần cuối sử dụng" + last_used_ago: "Sử dụng lần cuối %{time} trước" + expires: "Hết hạn" + ago: "trước" + never_used: "Chưa bao giờ sử dụng" + never_expires: "Không bao giờ hết hạn" + permissions: "Quyền" + scope_read_only: "Chỉ đọc" + scope_read_write: "Đọc/Ghi" + copy_api_key: "Sao chép khóa API" + copy_store_securely: "Sao chép và lưu trữ khóa này an toàn. Bạn sẽ cần nó để xác thực các yêu cầu API." + usage_instructions_title: "Cách sử dụng khóa API của bạn" + usage_instructions: "Bao gồm khóa API của bạn trong tiêu đề X-Api-Key khi gửi yêu cầu đến API %{product_name}:" + regenerate_key: "Tạo khóa mới" + revoke_key: "Thu hồi khóa" + revoke_confirmation: "Bạn có chắc chắn muốn thu hồi khóa API này? Hành động này không thể hoàn tác và sẽ ngay lập tức vô hiệu hóa tất cả ứng dụng đang sử dụng khóa này." + new: + title: "Tạo khóa API" + create_new_api_key: "Tạo khóa API mới" + subtitle: "Tạo khóa API mới để truy cập dữ liệu Sure của bạn theo chương trình." + description: "Cấu hình khóa API mới với tên mô tả và quyền phù hợp." + name_label: "Tên khóa API" + name_placeholder: "ví dụ: Ứng dụng ngân sách, Trình theo dõi danh mục đầu tư" + name_help_text: "Chọn tên mô tả để giúp bạn xác định khóa này sau." + name_help: "Chọn tên mô tả để giúp bạn xác định mục đích của khóa này." + permissions_label: "Quyền" + permissions_help: "Chọn quyền mà khóa API này nên có:" + scope_read_only: "Chỉ đọc" + scope_read_only_description: "Xem tài khoản, giao dịch và số dư của bạn" + scope_read_write: "Đọc/Ghi" + scope_read_write_description: "Xem dữ liệu và tạo giao dịch mới" + scope_details: + read_accounts: "Xem thông tin tài khoản, số dư và dữ liệu cấp tài khoản" + read_transactions: "Xem dữ liệu giao dịch, danh mục và chi tiết giao dịch" + read_balances: "Xem dữ liệu số dư lịch sử và xu hướng giá trị tài khoản" + write_transactions: "Tạo và cập nhật bản ghi giao dịch (sắp ra mắt)" + security_warning_title: "Cảnh báo bảo mật" + security_warning_body: "Khóa API của bạn sẽ chỉ được hiển thị một lần sau khi tạo. Đảm bảo sao chép và lưu trữ an toàn. Bất kỳ ai có quyền truy cập vào khóa này đều có thể truy cập dữ liệu của bạn theo quyền bạn chọn." + security_warning: "Khóa API của bạn chỉ được hiển thị một lần sau khi tạo. Lưu trữ an toàn và không bao giờ chia sẻ công khai. Nếu mất, bạn cần tạo khóa mới." + create_key: "Tạo khóa API" + cancel: "Hủy" + save_api_key: "Lưu khóa API" + created: + page_title: "Khóa API đã được tạo" + title: "Khóa API đã được tạo" + success_title: "Khóa API đã được tạo thành công" + success_description: "Khóa API mới của bạn đã được tạo thành công." + key_ready: "Khóa API mới \"%{name}\" của bạn đã được tạo và sẵn sàng sử dụng." + your_api_key: "Khóa API của bạn" + copy_store_securely: "Sao chép và lưu trữ khóa này an toàn. Bạn sẽ cần nó để xác thực các yêu cầu API." + key_details_title: "Chi tiết khóa" + key_name_label: "Tên:" + permissions_label: "Quyền:" + created_label: "Đã tạo:" + security_note_title: "Lưu ý bảo mật quan trọng" + security_note_body: "Đây là lần duy nhất khóa API của bạn được hiển thị. Đảm bảo sao chép ngay và lưu trữ an toàn. Nếu mất khóa này, bạn cần tạo khóa mới." + usage_instructions_title: "Cách sử dụng khóa API của bạn" + key_name: "Tên" + permissions: "Quyền" + critical_warning_title: "Quan trọng: Lưu khóa API ngay bây giờ" + critical_warning_1: "Đây là lần duy nhất bạn thấy khóa API ở dạng văn bản thuần túy." + critical_warning_2: "Sao chép và lưu trữ an toàn trong trình quản lý mật khẩu hoặc ứng dụng của bạn." + critical_warning_3: "Nếu mất khóa này, bạn cần tạo khóa mới." + usage_instructions: "Sử dụng khóa API bằng cách bao gồm nó trong tiêu đề X-Api-Key:" + copy_key: "Sao chép khóa API" + continue: "Tiếp tục đến Cài đặt khóa API" diff --git a/config/locales/views/settings/hostings/vi.yml b/config/locales/views/settings/hostings/vi.yml new file mode 100644 index 000000000..6b9bc4766 --- /dev/null +++ b/config/locales/views/settings/hostings/vi.yml @@ -0,0 +1,194 @@ +--- +vi: + settings: + hostings: + invite_code_settings: + description: Kiểm soát cách người mới đăng ký cho phiên bản %{product} của bạn. + email_confirmation_description: Khi bật, người dùng phải xác nhận địa chỉ email khi thay đổi. + email_confirmation_title: Yêu cầu xác nhận email + default_family_title: Gia đình mặc định cho người dùng mới + default_family_description: "Đặt người dùng mới vào gia đình/nhóm này chỉ khi họ không có lời mời." + default_family_none: Không có (tạo gia đình mới) + generate_tokens: Tạo mã mới + generated_tokens: Mã đã tạo + title: Giới thiệu + states: + open: Mở + closed: Đóng + invite_only: Chỉ theo lời mời + show: + general: Cài đặt chung + ai_assistant: Trợ lý AI + financial_data_providers: Nhà cung cấp dữ liệu tài chính + sync_settings: Cài đặt đồng bộ + invites: Mã mời + title: Tự lưu trữ + danger_zone: Vùng nguy hiểm + clear_cache: Xóa bộ nhớ đệm dữ liệu + clear_cache_warning: Xóa bộ nhớ đệm dữ liệu sẽ xóa tất cả tỷ giá hối đoái, giá chứng khoán, số dư tài khoản và dữ liệu khác. Thao tác này sẽ không xóa tài khoản, giao dịch, danh mục hoặc dữ liệu người dùng khác. + confirm_clear_cache: + title: Xóa bộ nhớ đệm dữ liệu? + body: Bạn có chắc chắn muốn xóa bộ nhớ đệm dữ liệu? Thao tác này sẽ xóa tất cả tỷ giá hối đoái, giá chứng khoán, số dư tài khoản và dữ liệu khác. Hành động này không thể hoàn tác. + provider_selection: + exchange_rate_title: Nhà cung cấp tỷ giá hối đoái + exchange_rate_description: Chọn một nhà cung cấp để lấy tỷ giá hối đoái tiền tệ. + exchange_rate_provider_label: Nhà cung cấp tỷ giá hối đoái + securities_title: Nhà cung cấp chứng khoán + securities_description: Bật một hoặc nhiều nhà cung cấp để lấy giá cổ phiếu, ETF và quỹ tương hỗ. Khi tìm kiếm, tất cả nhà cung cấp được bật đều được truy vấn và kết quả được hợp nhất. + env_configured_message: Lựa chọn nhà cung cấp bị tắt vì các biến môi trường đã được đặt. Để bật lựa chọn tại đây, hãy xóa các biến môi trường này khỏi cấu hình của bạn. + twelve_data_hint: yêu cầu khóa API, 800 tín dụng/ngày + yahoo_finance_hint: miễn phí, không cần khóa API + requires_api_key: yêu cầu khóa API + requires_api_key_eodhd: yêu cầu khóa API, giới hạn 20 lần gọi/ngày + requires_api_key_alpha_vantage: yêu cầu khóa API, giới hạn 25 lần gọi/ngày + mfapi_hint: miễn phí, không cần khóa API -- chỉ quỹ tương hỗ Ấn Độ + binance_public_hint: miễn phí, không cần khóa API -- chỉ tiền điện tử (BTC, ETH, v.v.) + providers: + twelve_data: Twelve Data + yahoo_finance: Yahoo Finance + tiingo: Tiingo + eodhd: EODHD + alpha_vantage: Alpha Vantage + mfapi: MFAPI.in + binance_public: Binance + assistant_settings: + title: Trợ lý AI + description: Chọn cách trợ lý trò chuyện phản hồi. Tích hợp sẵn sử dụng nhà cung cấp LLM đã cấu hình trực tiếp. Bên ngoài ủy thác cho tác nhân AI từ xa có thể gọi lại các công cụ tài chính của Sure qua MCP. + type_label: Loại trợ lý + type_builtin: Tích hợp sẵn (LLM trực tiếp) + type_external: Bên ngoài (tác nhân từ xa) + external_status: Endpoint trợ lý bên ngoài + external_configured: Đã cấu hình + external_not_configured: Chưa được cấu hình. Nhập URL và token bên dưới, hoặc đặt biến môi trường EXTERNAL_ASSISTANT_URL và EXTERNAL_ASSISTANT_TOKEN. + env_notice: "Loại trợ lý bị khóa ở '%{type}' qua biến môi trường ASSISTANT_TYPE." + env_configured_external: Đã cấu hình thành công qua biến môi trường. + url_label: URL endpoint + url_placeholder: "https://your-agent-host/v1/chat" + url_help: URL đầy đủ đến endpoint API của tác nhân. Nhà cung cấp tác nhân sẽ cung cấp cho bạn thông tin này. + token_label: Mã thông báo API + token_placeholder: Nhập mã thông báo từ nhà cung cấp tác nhân + token_help: Mã thông báo xác thực do tác nhân bên ngoài cung cấp. Được gửi dưới dạng Bearer token với mỗi yêu cầu. + agent_id_label: ID tác nhân (Tùy chọn) + agent_id_placeholder: "main (mặc định)" + agent_id_help: Định tuyến đến tác nhân cụ thể khi nhà cung cấp lưu trữ nhiều tác nhân. Để trống cho tác nhân mặc định. + disconnect_title: Kết nối bên ngoài + disconnect_description: Xóa kết nối trợ lý bên ngoài và chuyển về trợ lý tích hợp sẵn. + disconnect_button: Ngắt kết nối + confirm_disconnect: + title: Ngắt kết nối trợ lý bên ngoài? + body: Thao tác này sẽ xóa URL, token và ID tác nhân đã lưu, và chuyển về trợ lý tích hợp sẵn. Bạn có thể kết nối lại sau bằng cách nhập thông tin xác thực mới. + brand_fetch_settings: + description: Nhập Client ID do Brand Fetch cung cấp + env_configured_message: Bạn đã cấu hình thành công Client ID Brand Fetch qua biến môi trường BRAND_FETCH_CLIENT_ID. + show_details: "(hiển thị chi tiết)" + setup_step_1_html: 'Truy cập brandfetch.com và tạo tài khoản nhà phát triển Brand Fetch miễn phí.' + setup_step_2_html: 'Đi đến trang Logo API.' + setup_step_3: 'Nhấn biểu tượng mắt dưới phần "Your Client ID" để hiển thị Client ID và dán vào bên dưới.' + label: Client ID + placeholder: Nhập Client ID của bạn vào đây + title: Cài đặt Brand Fetch + high_res_label: Bật logo độ phân giải cao + high_res_description: Khi bật, logo sẽ được lấy ở độ phân giải 120x120 thay vì 40x40. Điều này cung cấp hình ảnh sắc nét hơn trên màn hình độ phân giải cao. + openai_settings: + description: Nhập token truy cập và tùy chọn cấu hình nhà cung cấp tương thích OpenAI tùy chỉnh + env_configured_message: Đã cấu hình thành công qua biến môi trường. + access_token_label: Token truy cập + access_token_placeholder: Nhập token truy cập của bạn vào đây + uri_base_label: URL cơ sở API (Tùy chọn) + uri_base_placeholder: "https://api.openai.com/v1 (mặc định)" + model_label: Mô hình (Tùy chọn) + model_placeholder: "gpt-4.1 (mặc định)" + json_mode_label: Chế độ JSON + json_mode_auto: Tự động (khuyến nghị) + json_mode_strict: Nghiêm ngặt (tốt nhất cho mô hình suy nghĩ) + json_mode_none: Không (tốt nhất cho mô hình tiêu chuẩn) + json_mode_json_object: Đối tượng JSON + json_mode_help: "Chế độ nghiêm ngặt hoạt động tốt nhất với mô hình suy nghĩ (qwen-thinking, deepseek-reasoner). Chế độ không hoạt động tốt nhất với mô hình tiêu chuẩn (llama, mistral, gpt-oss)." + budget_heading: Ngân sách token + budget_description: Áp dụng cho mọi lần gọi LLM — lịch sử trò chuyện, phân loại tự động, phát hiện nhà cung cấp và xử lý PDF. Mặc định được đặt thận trọng cho các mô hình cục bộ ngữ cảnh nhỏ. Tăng lên cho các mô hình đám mây với cửa sổ ngữ cảnh lớn hơn. + context_window_label: Cửa sổ ngữ cảnh (Tùy chọn) + context_window_help: "Tổng số token mô hình sẽ chấp nhận. Mặc định: 2048 — tăng lên 8192+ cho OpenAI đám mây hoặc mô hình cục bộ ngữ cảnh lớn." + max_response_tokens_label: Số token phản hồi tối đa (Tùy chọn) + max_response_tokens_help: "Token dành cho phản hồi của mô hình. Mặc định: 512. Giảm để dành chỗ cho lịch sử dài hơn." + max_items_per_call_label: Số mục tối đa mỗi lô (Tùy chọn) + max_items_per_call_help: "Giới hạn trên cho lô phân loại tự động / phát hiện nhà cung cấp. Mặc định: 25. Lô lớn hơn được tự động cắt để phù hợp với cửa sổ ngữ cảnh." + title: OpenAI + yahoo_finance_settings: + title: Yahoo Finance + description: Yahoo Finance cung cấp quyền truy cập miễn phí vào giá cổ phiếu, tỷ giá hối đoái và dữ liệu tài chính mà không cần khóa API. + status_active: Yahoo Finance đang hoạt động + status_inactive: Kết nối Yahoo Finance thất bại + connection_failed: Không thể kết nối với Yahoo Finance + troubleshooting: Kiểm tra kết nối internet và cài đặt tường lửa của bạn. Yahoo Finance có thể tạm thời không khả dụng. + tiingo_settings: + title: Tiingo + description: Nhập token API do Tiingo cung cấp. Gói miễn phí hỗ trợ 50 ký hiệu duy nhất mỗi giờ với hơn 30 năm dữ liệu lịch sử. + env_configured_message: Đã cấu hình thành công qua biến môi trường TIINGO_API_KEY. + label: Token API + placeholder: Nhập token API Tiingo của bạn vào đây + show_details: "(hiển thị chi tiết)" + step_1_html: 'Truy cập tiingo.com và tạo tài khoản miễn phí.' + step_2_html: 'Đi đến trang Token API.' + step_3: Sao chép token API và dán vào bên dưới. + eodhd_settings: + title: EODHD + description: Nhập token API do EODHD cung cấp. Hỗ trợ ETF EU trên LSE, XETRA và các sàn giao dịch quốc tế khác. + env_configured_message: Đã cấu hình thành công qua biến môi trường EODHD_API_KEY. + label: Token API + placeholder: Nhập token API EODHD của bạn vào đây + show_details: "(hiển thị chi tiết)" + step_1_html: 'Truy cập eodhd.com và tạo tài khoản miễn phí.' + step_2_html: 'Đi đến Bảng điều khiển để tìm token API.' + step_3: Sao chép token API và dán vào bên dưới. + rate_limit_warning: "Gói miễn phí EODHD giới hạn 20 lần gọi API mỗi ngày. Tốt nhất dùng làm nhà cung cấp bổ sung cho ETF EU không có sẵn từ các nhà cung cấp khác." + alpha_vantage_settings: + title: Alpha Vantage + description: Nhập khóa API từ Alpha Vantage. Hỗ trợ ETF EU trên Sàn giao dịch chứng khoán London, XETRA và các sàn khác. + env_configured_message: Đã cấu hình thành công qua biến môi trường ALPHA_VANTAGE_API_KEY. + label: Khóa API + placeholder: Nhập khóa API Alpha Vantage của bạn vào đây + show_details: "(hiển thị chi tiết)" + step_1_html: 'Truy cập alphavantage.co và nhận khóa API miễn phí.' + step_2: Sao chép khóa API và dán vào bên dưới. + rate_limit_warning: "Gói miễn phí Alpha Vantage giới hạn 25 lần gọi API mỗi ngày. Tốt nhất dùng làm nhà cung cấp bổ sung cho ETF EU không có sẵn từ các nhà cung cấp khác." + no_health_check_note: "Kiểm tra sức khỏe kết nối không khả dụng cho nhà cung cấp này do giới hạn tốc độ nghiêm ngặt." + twelve_data_settings: + api_calls_used: "%{used} / %{limit} lần gọi API hàng ngày đã sử dụng (%{percentage})" + description: Nhập khóa API do Twelve Data cung cấp + env_configured_message: Đã cấu hình thành công qua biến môi trường TWELVE_DATA_API_KEY. + label: Khóa API + placeholder: Nhập khóa API của bạn vào đây + show_details: "(hiển thị chi tiết)" + step_1_html: 'Truy cập twelvedata.com và tạo tài khoản nhà phát triển Twelve Data miễn phí.' + step_2_html: 'Đi đến trang Khóa API.' + step_3: Hiển thị Khóa bí mật và dán vào bên dưới. + plan: "Gói %{plan}" + plan_upgrade_warning_title: Một số ký hiệu yêu cầu gói trả phí + plan_upgrade_warning_description: Các ký hiệu sau trong danh mục đầu tư của bạn không thể đồng bộ giá với gói Twelve Data hiện tại. + requires_plan: yêu cầu gói %{plan} + view_pricing: Xem bảng giá Twelve Data + title: Twelve Data + update: + failure: Giá trị cài đặt không hợp lệ + success: Cài đặt đã được cập nhật + invalid_onboarding_state: Trạng thái giới thiệu không hợp lệ + invalid_sync_time: "Định dạng thời gian đồng bộ không hợp lệ. Vui lòng sử dụng định dạng HH:MM (ví dụ: 02:30)." + invalid_llm_budget: "%{field} phải là số nguyên ≥ %{minimum}." + scheduler_sync_failed: Đã lưu cài đặt, nhưng cập nhật lịch đồng bộ thất bại. Vui lòng thử lại hoặc kiểm tra nhật ký máy chủ. + disconnect_external_assistant: + external_assistant_disconnected: Trợ lý bên ngoài đã bị ngắt kết nối + clear_cache: + cache_cleared: Bộ nhớ đệm dữ liệu đã được xóa. Quá trình này có thể mất vài giây để hoàn tất. + not_authorized: Bạn không có quyền thực hiện hành động này + ensure_super_admin_for_onboarding: + not_authorized: Bạn không có quyền thực hiện hành động này + sync_auto_sync_scheduler!: + scheduler_sync_failed: Đã lưu cài đặt, nhưng cập nhật lịch đồng bộ thất bại. Vui lòng thử lại hoặc kiểm tra nhật ký máy chủ. + sync_settings: + auto_sync_label: Bật đồng bộ tự động + auto_sync_description: Khi bật, tất cả tài khoản sẽ được tự động đồng bộ hàng ngày vào thời gian đã chỉ định. + auto_sync_time_label: Thời gian đồng bộ (HH:MM) + auto_sync_time_description: Chỉ định thời điểm trong ngày khi đồng bộ tự động sẽ xảy ra. + include_pending_label: Bao gồm giao dịch đang chờ + include_pending_description: Khi bật, các giao dịch đang chờ (chưa được ghi nhận) sẽ được nhập và tự động đối soát khi được đăng. Tắt nếu ngân hàng của bạn cung cấp dữ liệu đang chờ không đáng tin cậy. + env_configured_message: Cài đặt này bị tắt vì biến môi trường nhà cung cấp (SIMPLEFIN_INCLUDE_PENDING hoặc PLAID_INCLUDE_PENDING) đã được đặt. Xóa nó để bật cài đặt này. diff --git a/config/locales/views/settings/securities/vi.yml b/config/locales/views/settings/securities/vi.yml new file mode 100644 index 000000000..34b2dde36 --- /dev/null +++ b/config/locales/views/settings/securities/vi.yml @@ -0,0 +1,31 @@ +--- +vi: + settings: + securities: + show: + disable_mfa: Tắt 2FA + disable_mfa_confirm: Bạn có chắc chắn muốn tắt xác thực hai yếu tố không? Điều này sẽ làm giảm bảo mật tài khoản của bạn. + enable_mfa: Bật 2FA + mfa_enabled_status_html: "Xác thực hai yếu tố đang bật" + mfa_enabled_description: Tài khoản của bạn được bảo vệ bằng lớp bảo mật bổ sung. + mfa_disabled_status_html: "Xác thực hai yếu tố đang tắt" + mfa_disabled_description: Bật 2FA để thêm lớp bảo mật cho tài khoản của bạn. + mfa_description: Thêm lớp bảo mật cho tài khoản bằng cách yêu cầu mã từ ứng dụng xác thực khi đăng nhập + mfa_title: Xác thực hai yếu tố + webauthn_add: Thêm khóa passkey hoặc khóa bảo mật + webauthn_added: Đã thêm %{date} + webauthn_description: Sử dụng passkey, Touch ID, Windows Hello hoặc khóa bảo mật phần cứng làm yếu tố thứ hai khi đăng nhập. + webauthn_empty: Chưa có passkey hoặc khóa bảo mật nào được đăng ký. + webauthn_last_used: Sử dụng lần cuối %{time_ago} trước + webauthn_name_label: Tên khóa + webauthn_name_placeholder: MacBook Touch ID, YubiKey, v.v. + webauthn_remove: Xóa + webauthn_remove_confirm: Bạn có chắc chắn muốn xóa passkey hoặc khóa bảo mật này không? + webauthn_remove_confirm_body: Bạn sẽ cần đăng ký lại passkey hoặc khóa bảo mật này trước khi có thể sử dụng để xác minh đăng nhập. + webauthn_title: Passkey và khóa bảo mật + webauthn_unsupported: Trình duyệt này không hỗ trợ passkey hoặc khóa bảo mật. + webauthn_credentials: + default_name: Khóa bảo mật + failure: Không thể lưu passkey hoặc khóa bảo mật. Vui lòng thử lại. + mfa_required: Bật xác thực hai yếu tố trước khi thêm passkey hoặc khóa bảo mật. + success: Passkey hoặc khóa bảo mật đã được xóa. diff --git a/config/locales/views/settings/sso_identities/vi.yml b/config/locales/views/settings/sso_identities/vi.yml new file mode 100644 index 000000000..486295e5e --- /dev/null +++ b/config/locales/views/settings/sso_identities/vi.yml @@ -0,0 +1,7 @@ +--- +vi: + settings: + sso_identities: + destroy: + cannot_unlink_last: Không thể hủy liên kết danh tính cuối cùng + success: Đã hủy liên kết danh tính SSO thành công diff --git a/config/locales/views/settings/vi.yml b/config/locales/views/settings/vi.yml new file mode 100644 index 000000000..a5ac5f5e1 --- /dev/null +++ b/config/locales/views/settings/vi.yml @@ -0,0 +1,512 @@ +--- +vi: + views: + settings: + payments: + renewal: "Đóng góp của bạn tiếp tục vào ngày %{date}." + cancellation: "Đóng góp của bạn kết thúc vào ngày %{date}." + settings: + debugs: + show: + page_title: "Gỡ lỗi" + title: "Nhật ký sự kiện gỡ lỗi" + subtitle: "Các sự kiện vận hành quan trọng dành cho siêu quản trị viên. Mới nhất trước." + empty: "Không tìm thấy sự kiện gỡ lỗi." + missing_value: "-" + filters: + all: "Tất cả" + category: "Danh mục" + level: "Cấp độ" + source: "Nguồn" + provider: "Nhà cung cấp" + start_date: "Từ" + end_date: "Đến" + family_id: "ID hộ gia đình" + account_id: "ID tài khoản" + user_id: "ID người dùng" + account_provider_id: "ID nhà cung cấp tài khoản" + submit: "Lọc" + reset: "Đặt lại" + table: + time: "Thời gian" + level: "Cấp độ" + category: "Danh mục" + source: "Nguồn" + message: "Thông báo" + context: "Bối cảnh" + metadata: "Siêu dữ liệu" + view_metadata: "Xem" + context: + provider: "provider=%{value}" + family: "family=%{value}" + account: "account=%{value}" + user: "user=%{value}" + account_provider: "account_provider=%{value}" + llm_usages: + show: + page_title: "Sử dụng & Chi phí LLM" + subtitle: "Theo dõi lượng sử dụng AI và chi phí ước tính" + start_date: "Ngày bắt đầu" + end_date: "Ngày kết thúc" + filter: "Lọc" + total_requests: "Tổng yêu cầu" + total_tokens: "Tổng token" + prompt: "lệnh" + completion: "hoàn thành" + total_cost: "Tổng chi phí" + avg_cost_per_request: "Chi phí tb/yêu cầu" + based_on_requests: "Dựa trên %{with_cost} trong %{total} yêu cầu có dữ liệu chi phí" + cost_by_operation: "Chi phí theo thao tác" + cost_by_model: "Chi phí theo mô hình" + recent_usage: "Sử dụng gần đây" + col_date: "Ngày" + col_operation: "Thao tác" + col_model: "Mô hình" + col_tokens: "Token" + col_cost: "Chi phí" + failed: "Thất bại" + no_usage_data: "Không tìm thấy dữ liệu sử dụng cho kỳ đã chọn" + cost_estimates_title: "Về ước tính chi phí" + cost_estimates_description: "Chi phí được ước tính dựa trên bảng giá của OpenAI từ năm 2025. Chi phí thực tế có thể khác nhau. Giá tính trên 1 triệu token và thay đổi theo mô hình. Mô hình tùy chỉnh hoặc tự lưu trữ sẽ hiển thị \"N/A\" và không được tính vào tổng chi phí." + ai_prompts: + show: + page_title: Câu lệnh AI + openai_label: OpenAI + disable_ai: Tắt trợ lý AI + prompt_instructions: Hướng dẫn câu lệnh + main_system_prompt: + title: Câu lệnh hệ thống chính + subtitle: Hướng dẫn cốt lõi xác định cách trợ lý AI hoạt động trong tất cả cuộc trò chuyện + transaction_categorizer: + title: Phân loại giao dịch + subtitle: AI tự động phân loại giao dịch dựa trên các danh mục bạn định nghĩa + merchant_detector: + title: Phát hiện nhà cung cấp + subtitle: AI xác định và làm phong phú dữ liệu giao dịch với thông tin nhà cung cấp + payments: + show: + page_title: Thanh toán + subscription_subtitle: Cập nhật thông tin thẻ tín dụng + subscription_title: Quản lý đóng góp + currently_on_plan: "Hiện đang dùng" + trialing: "Hiện đang dùng bản demo mở của %{product_name}" + trial_days_left: + one: "Dữ liệu sẽ bị xóa sau %{count} ngày" + other: "Dữ liệu sẽ bị xóa sau %{count} ngày" + not_contributing_prefix: "Bạn hiện" + not_contributing_emphasis: "chưa đóng góp" + contributions_note: "Đóng góp cho %{product_name} sẽ hiển thị ở đây." + manage: "Quản lý" + choose_level: "Chọn mức" + payment_via_stripe: "Thanh toán qua Stripe" + appearances: + show: + page_title: Giao diện + theme_title: Giao diện + theme_subtitle: Chọn giao diện ưa thích cho ứng dụng + theme_dark: Tối + theme_light: Sáng + theme_system: Hệ thống + transactions_title: Giao dịch + transactions_subtitle: Tùy chỉnh cách hiển thị giao dịch + dashboard_title: Bảng điều khiển + dashboard_subtitle: Tùy chỉnh cách hiển thị bảng điều khiển + dashboard_two_column_title: Bố cục hai cột + dashboard_two_column_description: Hiển thị các widget bảng điều khiển thành hai cột trên màn hình lớn. Khi tắt, các widget xếp chồng thành một cột. + split_grouped_title: Nhóm giao dịch phân chia + split_grouped_description: Hiển thị giao dịch phân chia được nhóm dưới giao dịch cha trong danh sách. Khi tắt, các mục con phân chia xuất hiện như các hàng riêng biệt. + preferences: + show: + country: Quốc gia + currency: Tiền tệ + date_format: Định dạng ngày + general_subtitle: Cấu hình tùy chọn của bạn + general_title: Chung + default_period: Kỳ mặc định + default_account_order: Thứ tự tài khoản mặc định + language: Ngôn ngữ + language_auto: Ngôn ngữ trình duyệt + page_title: Tùy chọn + timezone: Múi giờ + month_start_day: Ngân sách tháng bắt đầu vào + month_start_day_hint: "Đặt ngày bắt đầu tháng ngân sách (ví dụ: ngày nhận lương)" + month_start_day_warning: Ngân sách và tính toán MTD của bạn sẽ dùng ngày bắt đầu tùy chỉnh này thay vì ngày 1 mỗi tháng. + translations_notice: Lưu ý, chúng tôi vẫn đang tiếp tục dịch cho các ngôn ngữ khác nhau. + currencies_title: "Tiền tệ %{moniker}" + currencies_subtitle: Chọn tiền tệ xuất hiện trong các trường tiền tệ cho %{moniker} của bạn + base_currency_label: Tiền tệ cơ sở + base_currency_badge: Tiền tệ cơ sở + additional_currencies_label: Tiền tệ bổ sung + no_additional_currencies: Chưa chọn + currencies_more: "+%{count} khác" + manage_currencies: Quản lý tiền tệ + manage_currencies_subtitle: Bỏ chọn các tiền tệ bạn không dùng, hoặc thu gọn danh sách xuống một vài loại. + select_all_currencies: Chọn tất cả + select_base_only: Chỉ tiền tệ cơ sở + currency_search_placeholder: Tìm kiếm tiền tệ + no_matching_currencies: Không tìm thấy tiền tệ + selected_currencies_count: + one: "%{count} đã chọn" + other: "%{count} đã chọn" + save_currencies: Lưu tiền tệ + sharing_title: "Chia sẻ %{moniker}" + sharing_subtitle: "Kiểm soát cách chia sẻ tài khoản trong %{moniker} của bạn" + sharing_default_label: Chia sẻ mặc định cho tài khoản mới + sharing_shared: Chia sẻ với tất cả thành viên + sharing_private: Giữ riêng tư mặc định + preview: + title: Bật tính năng xem trước + description: Chọn tham gia các tính năng đang phát triển được gắn thẻ xem trước hoặc canary. + profiles: + destroy: + cannot_remove_self: Bạn không thể tự xóa mình khỏi tài khoản. + member_owns_other_family_data: Thành viên này vẫn sở hữu tài khoản trong hộ gia đình khác và không thể xóa. Hãy chuyển hoặc xóa các tài khoản đó trước. + member_removal_failed: Đã xảy ra sự cố khi xóa thành viên. + member_removed: Thành viên đã được xóa thành công. + not_authorized: Bạn không có quyền xóa thành viên. + show: + confirm_delete: + body: Bạn có chắc muốn xóa vĩnh viễn tài khoản của mình? Hành động này không thể hoàn tác. + title: Xóa tài khoản? + confirm_reset: + body: Bạn có chắc muốn đặt lại tài khoản? Thao tác này sẽ xóa tất cả tài khoản, danh mục, nhà cung cấp, nhãn và dữ liệu khác. Không thể hoàn tác. + title: Đặt lại tài khoản? + confirm_reset_with_sample_data: + body: Bạn có chắc muốn đặt lại tài khoản và tải dữ liệu mẫu? Thao tác này sẽ xóa dữ liệu hiện tại và thay thế bằng dữ liệu demo để bạn khám phá Sure an toàn. + title: Đặt lại tài khoản và tải dữ liệu mẫu? + confirm_remove_invitation: + body: Bạn có chắc muốn xóa lời mời cho %{email}? + title: Xóa lời mời + confirm_remove_member: + body: Bạn có chắc muốn xóa %{name} khỏi tài khoản? + title: Xóa thành viên + danger_zone_title: Khu vực nguy hiểm + delete_account: Xóa tài khoản + delete_account_warning: Xóa tài khoản sẽ xóa vĩnh viễn tất cả dữ liệu và không thể hoàn tác. + reset_account: Đặt lại tài khoản + reset_account_warning: Đặt lại tài khoản sẽ xóa tất cả tài khoản, danh mục, nhà cung cấp, nhãn và dữ liệu khác, nhưng giữ lại tài khoản người dùng. + reset_account_with_sample_data: Đặt lại và tải trước + reset_account_with_sample_data_warning: Xóa tất cả dữ liệu hiện tại rồi tải dữ liệu mẫu mới để khám phá với môi trường được điền sẵn. + email: Email + first_name: Tên + group_form_input_placeholder: Nhập tên nhóm + group_form_label: Tên nhóm + group_title: Thành viên nhóm + household_form_input_placeholder: Nhập tên hộ gia đình + household_form_label: Tên hộ gia đình + household_subtitle: Người được mời có thể đăng nhập vào %{moniker} của bạn và truy cập tài nguyên chia sẻ. + household_title: Hộ gia đình + invitation_link: Liên kết mời + invite_member: Thêm thành viên + last_name: Họ + page_title: Thông tin hồ sơ + pending: Đang chờ + profile_subtitle: Tùy chỉnh cách bạn hiển thị trên %{product_name} + profile_title: Cá nhân + remove_invitation: Xóa lời mời + remove_member: Xóa thành viên + save: Lưu + securities: + show: + page_title: Bảo mật + mfa_title: Xác thực hai yếu tố + mfa_description: Thêm lớp bảo mật cho tài khoản bằng cách yêu cầu mã từ ứng dụng xác thực khi đăng nhập + enable_mfa: Bật 2FA + disable_mfa: Tắt 2FA + disable_mfa_confirm: Bạn có chắc muốn tắt xác thực hai yếu tố? + sso_title: Tài khoản đã kết nối + sso_subtitle: Quản lý các kết nối tài khoản đăng nhập một lần + sso_disconnect: Ngắt kết nối + sso_last_used: Sử dụng lần cuối + sso_never: Chưa bao giờ + sso_no_email: Không có email + sso_no_identities: Chưa kết nối tài khoản SSO + sso_connect_hint: Đăng xuất và đăng nhập bằng nhà cung cấp SSO để kết nối tài khoản. + sso_confirm_title: Ngắt kết nối tài khoản? + sso_confirm_body: Bạn có chắc muốn ngắt kết nối tài khoản %{provider}? Bạn có thể kết nối lại sau bằng cách đăng nhập với nhà cung cấp đó. + sso_confirm_button: Ngắt kết nối + sso_warning_message: Đây là phương thức đăng nhập duy nhất của bạn. Hãy đặt mật khẩu trong cài đặt bảo mật trước khi ngắt kết nối, nếu không bạn có thể bị khóa khỏi tài khoản. + settings_nav: + accounts_label: Tài khoản + advanced_section_title: Nâng cao + ai_prompts_label: Câu lệnh AI + api_key_label: Khóa API + payment_label: Thanh toán + categories_label: Danh mục + feedback_label: Phản hồi + general_section_title: Chung + imports_label: Nhập dữ liệu + exports_label: Xuất dữ liệu + llm_usage_label: Sử dụng LLM + logout: Đăng xuất + merchants_label: Nhà cung cấp + providers_label: Nhà cung cấp dịch vụ + guides_label: Hướng dẫn + other_section_title: Thêm + preferences_label: Tùy chọn + profile_label: Thông tin hồ sơ + recurring_transactions_label: Định kỳ + rules_label: Quy tắc + security_label: Bảo mật + self_hosting_label: Tự lưu trữ + sso_providers_label: Nhà cung cấp SSO + statement_vault_label: Kho sao kê + tags_label: Nhãn + transactions_section_title: Giao dịch + users_label: Người dùng + whats_new_label: Có gì mới + api_keys_label: Khóa API + appearance_label: Giao diện + bank_sync_label: Đồng bộ ngân hàng + debug_label: Gỡ lỗi + settings_nav_link_large: + next: Tiếp theo + previous: Quay lại + user_avatar_field: + accepted_formats: JPG hoặc PNG. Tối đa 5MB. + choose: Tải ảnh lên + choose_label: (tùy chọn) + change: Thay đổi ảnh + providers: + update: + updated_successfully: Đã cập nhật cài đặt nhà cung cấp thành công + no_changes: Không có thay đổi nào được thực hiện + not_authorized: Không được phép + bank_sync: + page_title: Đồng bộ ngân hàng + lede: Kết nối tài khoản bên ngoài để giao dịch, số dư và danh mục nắm giữ tự động đồng bộ vào Sure. + status: + ok: Đã kết nối + warn: Cần hành động + err: Lỗi + off: Chưa cấu hình + maturity: + beta: Beta + alpha: Alpha + drawer_trust_statement: "Chỉ đọc. Sure không bao giờ có thể chuyển tiền, và thông tin đăng nhập của bạn được lưu trữ mã hóa." + setup_steps: + eyebrow: Thiết lập + need_help: "Cần trợ giúp?" + connect: Kết nối + groups: + your_connections: Kết nối của bạn + available: Khả dụng + empty_available: Tất cả nhà cung cấp khả dụng đã được kết nối. + health_strip: + connected: đã kết nối + needs_attention: cần chú ý + accounts_syncing: tài khoản đang đồng bộ + last_synced: Đồng bộ lần cuối %{time} trước + meta: + sync_error: Lỗi đồng bộ + no_recent_sync: Đồng bộ quá hạn + registration_needed: Cần đăng ký + reconsent_required: Cần đồng ý lại + reconsent_needed: + one: Cần đồng ý lại sau 1 ngày + other: Cần đồng ý lại sau %{count} ngày + last_synced: Đồng bộ %{time} trước + sync_all: Đồng bộ tất cả + sync_all_in_progress: Đang đồng bộ tất cả nhà cung cấp đã kết nối… + sync_all_recently: Đồng bộ đang được thực hiện. Thử lại sau một chút. + sync_provider: Đồng bộ ngay + sync_provider_in_progress: Đã bắt đầu đồng bộ. + recently_synced: Đã đồng bộ gần đây. Thử lại sau một chút. + taglines: + simplefin: Kết nối tài khoản ngân hàng Mỹ qua giao thức mở SimpleFIN. + lunchflow: Kết nối 20.000+ ngân hàng từ 40+ quốc gia (Anh, EU, Mỹ và nhiều hơn!) + enable_banking: Đồng bộ tài khoản ngân hàng châu Âu qua ngân hàng mở PSD2. + coinstats: Theo dõi toàn bộ danh mục tiền mã hóa trên ví và sàn giao dịch. + mercury: Tự động đồng bộ tài khoản ngân hàng doanh nghiệp Mercury. + brex: Đồng bộ tiền mặt và hoạt động thẻ doanh nghiệp Brex với quyền chỉ đọc. + coinbase: Nhập danh mục tiền mã hóa Coinbase và theo dõi hiệu suất. + binance: Đồng bộ số dư giao ngay Binance bằng khóa API chỉ đọc. + kraken: Đồng bộ số dư Kraken và giao dịch giao ngay bằng khóa API chỉ đọc. + snaptrade: Kết nối tài khoản môi giới qua mạng tổng hợp SnapTrade. + ibkr: Đồng bộ tài khoản đầu tư Interactive Brokers qua nhập Flex Query. + indexa_capital: Theo dõi danh mục đầu tư tự động Indexa Capital. + sophtron: Kết nối ngân hàng và tiện ích tại Mỹ & Canada. + plaid: Kết nối hàng ngàn tổ chức tài chính Mỹ qua Plaid. + plaid_eu: Kết nối tổ chức tài chính châu Âu qua Plaid (PSD2 / Open Banking). + search_filters: + aria_label: Tìm kiếm nhà cung cấp + placeholder: Tìm kiếm nhà cung cấp + chips: + all: Tất cả + bank: Ngân hàng + crypto: Tiền mã hóa + investment: Đầu tư + empty_filter: Không có nhà cung cấp phù hợp với bộ lọc. + clear_filter: Xóa bộ lọc + encryption_error: + title: Thiếu khóa mã hóa + message: "Đồng bộ ngân hàng cần cấu hình mã hóa Active Record. Đặt primary_key, deterministic_key và key_derivation_salt trong thông tin đăng nhập Rails hoặc biến môi trường." + provider_form: + save_and_connect: "Lưu và kết nối" + coinbase_panel: + setup_instructions: "Để kết nối Coinbase:" + step1_html: Vào Cài đặt API Coinbase + step2: Tạo khóa API mới với quyền chỉ đọc (xem tài khoản, xem giao dịch) + step3: Sao chép khóa API và bí mật API, dán vào bên dưới + api_key_label: Khóa API + api_key_placeholder: Nhập khóa API Coinbase + api_secret_label: Bí mật API + api_secret_placeholder: Nhập bí mật API Coinbase + connect_button: Kết nối Coinbase + syncing: Đang đồng bộ... + sync: Đồng bộ + disconnect_confirm: Bạn có chắc muốn ngắt kết nối Coinbase? Các tài khoản đã đồng bộ sẽ trở thành tài khoản thủ công. + binance_panel: + setup_instructions: "Để kết nối Binance, tạo khóa API chỉ đọc:" + step1_html: 'Vào Quản lý API Binance' + step2: "Tạo khóa API mới chỉ với quyền Bật Đọc" + step3: "Dán Khóa API và Bí mật vào bên dưới" + no_withdraw_title: "Chỉ khóa chỉ đọc" + no_withdraw_body: "Không bật quyền rút tiền khi tạo khóa API Binance. Sure chỉ cần quyền đọc." + ip_hint_title: "Yêu cầu danh sách trắng IP" + ip_hint_body: "Thêm IP đầu ra của máy chủ ứng dụng vào danh sách trắng Khóa API Binance:" + ip_hint_contact_admin: "Liên hệ quản trị viên để lấy địa chỉ IP đầu ra của máy chủ ứng dụng." + api_key_label: Khóa API + api_key_placeholder: Dán Khóa API Binance + api_secret_label: Bí mật API + api_secret_placeholder: Dán Bí mật API Binance + connect_button: Kết nối Binance + syncing: Đang đồng bộ... + sync: Đồng bộ + historical_import: "Cài đặt nhập dữ liệu lịch sử" + sync_start_date_label: "Nhập dữ liệu từ" + sync_start_date_help: "Chọn khoảng thời gian lịch sử cần tải." + disconnect_confirm: "Bạn có chắc muốn ngắt kết nối Binance?" + kraken_panel: + step1_html: 'Vào Cài đặt API Kraken' + step2: "Tạo khóa API chỉ với Truy vấn Quỹ và Truy vấn Lệnh & Giao dịch Đã Đóng." + step3: "Dán khóa API và khóa riêng vào bên dưới." + read_only_title: "Chỉ đồng bộ sàn giao dịch chỉ đọc" + read_only_body: "Không cấp quyền giao dịch, hủy, rút tiền, xuất, sổ cái, Earn, đặt cược hoặc chuyển. Sure chỉ nhập số dư, danh mục nắm giữ và giao dịch giao ngay." + default_connection_name: Kraken + add_connection: Thêm kết nối Kraken + update_connection: Cập nhật kết nối + connection_name_label: Tên kết nối + connection_name_placeholder: Kraken chính + api_key_label: Khóa API + api_key_placeholder: Dán khóa API Kraken + keep_api_key_placeholder: Để trống để giữ khóa API hiện tại + api_secret_label: Khóa riêng + api_secret_placeholder: Dán khóa riêng Kraken + keep_api_secret_placeholder: Để trống để giữ khóa riêng hiện tại + setup_accounts: Thiết lập tài khoản + syncing: Đang đồng bộ... + sync: Đồng bộ + disconnect: Ngắt kết nối + disconnect_confirm: "Bạn có chắc muốn ngắt kết nối %{name}?" + enable_banking_panel: + callback_url_instruction: "Đối với URL callback, sử dụng %{callback_url}." + connection_error: Lỗi kết nối + step_1_html: "Vào %{link} và lấy thông tin xác thực nhà phát triển." + step_2: "Chọn quốc gia và dán ID ứng dụng + Chứng chỉ khách hàng vào bên dưới." + step_3: "Lưu, rồi dùng Thêm kết nối để liên kết ngân hàng." + config_locked_title: "Cấu hình đã bị khóa" + config_locked_message: "Ngắt kết nối tất cả ngân hàng đã liên kết trước khi thay đổi thông tin xác thực này." + application_id_label: "ID ứng dụng" + application_id_placeholder_new: "Nhập ID ứng dụng" + application_id_placeholder_update: "Nhập ID mới để cập nhật" + client_certificate_label: "Chứng chỉ khách hàng (kèm khóa riêng)" + save_and_connect: "Lưu và kết nối" + update_connection: "Cập nhật kết nối" + connected_bank: "Ngân hàng đã kết nối" + session_expires: "Phiên hết hạn: %{date}" + unknown: "Không xác định" + connection: "Kết nối" + session_expired_reconnect: "Phiên hết hạn - kết nối lại" + configured: "Đã cấu hình" + ready_to_link: "Sẵn sàng liên kết tài khoản" + sync: "Đồng bộ" + reconnect: "Kết nối lại" + connect_bank: "Kết nối ngân hàng" + remove: "Xóa" + remove_confirm: "Bạn có chắc muốn xóa kết nối này?" + add_connection: "Thêm kết nối" + syncing: "Đang đồng bộ" + select_country: "Chọn quốc gia..." + country_label: "Quốc gia" + lunchflow_panel: + step_1_html: "Vào %{link} và tạo khóa API." + step_2: "Dán khóa vào bên dưới và kết nối." + step_3: "Sau đó vào Tài khoản để liên kết các tài khoản đã đồng bộ." + api_key_label: "Khóa API" + api_key_placeholder_new: "Dán khóa API tại đây" + api_key_placeholder_update: "Nhập khóa API mới để cập nhật" + base_url_label: "URL cơ sở (Tùy chọn)" + base_url_placeholder: "https://lunchflow.app/api/v1 (mặc định)" + save_and_connect: "Lưu và kết nối" + update_connection: "Cập nhật kết nối" + simplefin_panel: + step_1_html: "Vào %{link} để lấy token thiết lập một lần." + step_2: "Dán token vào bên dưới và kết nối." + step_3: "Sau đó vào Tài khoản để liên kết các tài khoản đã đồng bộ." + setup_token_label: "Token thiết lập" + setup_token_placeholder: "Dán token thiết lập SimpleFIN" + save_and_connect: "Lưu và kết nối" + plaid_panel: + step_1_html: "Mở %{link} và sao chép ID khách hàng và Khóa bí mật." + step_2: "Chọn môi trường. Dùng sandbox để kiểm tra và production cho tài khoản thực." + step_3: "Dán thông tin xác thực vào bên dưới và kết nối." + plaid_eu_panel: + step_1_html: "Mở %{link} và sao chép ID khách hàng EU và Khóa bí mật." + not_found: Không tìm thấy nhà cung cấp. + sync_provider_no_items: Không có kết nối nào để đồng bộ. + ibkr_panel: + steps: + step_1: 'Trong Client Portal IBKR, điều hướng đến "Hiệu suất & Báo cáo" > "Flex Queries".' + step_2: 'Nhấn biểu tượng "+" trong phần "Activity Flex Query" để tạo truy vấn mới.' + step_3: 'Đặt tên truy vấn (ví dụ: "Sure Sync"), sau đó xem chi tiết Flex Query bên dưới và bật các phần, trường và tùy chọn cấu hình được liệt kê.' + step_4: 'Lưu truy vấn, ghi chú "Query ID", rồi dùng biểu tượng bánh răng trong phần "Flex Web Service Configuration" để tạo Token truy cập.' + step_5: "Dán Query ID và Token vào bên dưới, lưu cấu hình, rồi vào Tài khoản để liên kết các tài khoản IBKR đã phát hiện." + flex_query_details: + eyebrow: Flex Query + title: Phần, trường và cấu hình + summary: Mở rộng để xem các phần, trường và cài đặt chính xác mà IBKR Activity Flex Query của bạn phải bao gồm. + sections_heading: Bật các phần và trường này + configuration_heading: Đặt các tùy chọn truy vấn này + sections: + account_information: "Thông tin tài khoản: ID tài khoản, Tiền tệ" + cash_report: "Báo cáo tiền mặt:" + cash_report_options: "Tùy chọn: Không" + cash_report_fields: "Trường: Tiền tệ, Tiền mặt cuối kỳ" + cash_transactions: "Giao dịch tiền mặt:" + cash_transactions_options: "Tùy chọn: Cổ tức, Nạp/Rút, Chi tiết" + cash_transactions_fields: "Trường: Số tiền, Conid, Tiền tệ, Tỷ giá FX sang Cơ sở, Ngày báo cáo, ID giao dịch, Loại" + change_in_position_value_summary: "Tóm tắt thay đổi giá trị vị thế: Tiền tệ, Giá trị cuối kỳ" + net_asset_value: "Giá trị tài sản ròng (NAV) theo Cơ sở:" + net_asset_value_options: "Tùy chọn: Không" + net_asset_value_fields: "Trường: Tiền tệ, Ngày báo cáo, Tổng" + open_positions: "Vị thế mở:" + open_positions_options: "Tùy chọn: Tóm tắt" + open_positions_fields: "Trường: Loại tài sản, Conid, Giá vốn, Tiền tệ, Tỷ giá FX, Giá đánh dấu, Số lượng, Ngày báo cáo, ID chứng khoán, Loại ID, Phía, Ký hiệu" + trades: "Giao dịch:" + trades_options: "Tùy chọn: Thực hiện" + trades_fields: "Trường: Loại tài sản, Mua/Bán, Conid, Tiền tệ, Tỷ giá FX, Hoa hồng IB, Tiền tệ hoa hồng, Số lượng, Ký hiệu, Ngày giao dịch, ID giao dịch, Giá giao dịch, ID giao dịch" + configuration: + models: "Mô hình: Tùy chọn" + format: "Định dạng: XML" + period: "Kỳ: 365 ngày lịch gần nhất" + date_format: "Định dạng ngày: yyyy-MM-dd" + time_format: "Định dạng giờ: HH:mm:ss" + date_time_separator: "Dấu phân cách ngày/giờ: ; (chấm phẩy)" + profit_and_loss: "Lãi và lỗ: Mặc định" + all_other_options: 'Tất cả tùy chọn cấu hình khác: "Không"' + report_window_note: "Báo cáo IBKR Flex bị giới hạn trong cửa sổ truy vấn bạn cấu hình trong IBKR. Sure sẽ nhập toàn bộ danh mục nắm giữ hiện tại cộng với tối đa 365 ngày hoạt động gần nhất từ báo cáo này." + sync: Đồng bộ + disconnect_confirm: Ngắt kết nối Interactive Brokers? + query_id_label: Query ID + query_id_placeholder_new: Nhập Query ID IBKR Flex của bạn + query_id_placeholder_existing: Để trống để giữ Query ID hiện tại + token_label: Token + token_placeholder_new: Nhập Token dịch vụ web IBKR Flex của bạn + token_placeholder_existing: Để trống để giữ Token hiện tại + save_configuration: Lưu cấu hình + update_configuration: Cập nhật cấu hình + status_configured_prefix: "%{summary}. Vào tab" + accounts_tab: Tài khoản + status_configured_suffix: để quản lý các tài khoản đã phát hiện. + not_configured: Chưa cấu hình. diff --git a/config/locales/views/shared/vi.yml b/config/locales/views/shared/vi.yml new file mode 100644 index 000000000..358af1fcc --- /dev/null +++ b/config/locales/views/shared/vi.yml @@ -0,0 +1,38 @@ +--- +vi: + concerns: + self_hostable: + redis_configured: "Redis đã được cấu hình đúng! Bây giờ bạn có thể thiết lập ứng dụng Sure của mình." + shared: + confirm_modal: + accept: Xác nhận + body_html: "

Bạn sẽ không thể hoàn tác quyết định này

" + cancel: Hủy + title: Bạn có chắc không? + money_field: + label: Số tiền + exchange_rate_tabs: + calculate_rate_tab: Tính tỷ giá ngoại tệ + convert_tab: Chuyển đổi với tỷ giá + destination_amount: Số tiền đích + exchange_rate: Tỷ giá + exchange_rate_help: Chọn cách nhập số tiền. + syncing_notice: + syncing: Đang đồng bộ dữ liệu tài khoản... + require_admin: "Chỉ quản trị viên mới có thể thực hiện hành động này" + custom_confirm: + default_title: "Bạn có chắc không?" + default_body: "Thao tác này không thể hoàn tác." + default_btn_text: "Xác nhận" + family_moniker: + group_plural: Nhóm + group_singular: Nhóm + plural: Hộ gia đình + singular: Hộ gia đình + trend_change: + no_change: "không thay đổi" + cancel: Hủy + transaction_tabs: + expense: Chi tiêu + income: Thu nhập + transfer: Chuyển khoản diff --git a/config/locales/views/simplefin_items/vi.yml b/config/locales/views/simplefin_items/vi.yml new file mode 100644 index 000000000..11445ed09 --- /dev/null +++ b/config/locales/views/simplefin_items/vi.yml @@ -0,0 +1,159 @@ +--- +vi: + simplefin_items: + new: + title: Kết nối SimpleFIN + setup_token: Mã thiết lập + setup_token_placeholder: dán mã thiết lập SimpleFIN của bạn vào đây + connect: Kết nối + cancel: Hủy + create: + success: Kết nối SimpleFIN đã được thêm thành công! Các tài khoản của bạn sẽ xuất hiện sau khi đồng bộ trong nền. + errors: + blank_token: Vui lòng nhập mã thiết lập SimpleFIN. + invalid_token: Mã thiết lập không hợp lệ. Vui lòng kiểm tra rằng bạn đã sao chép toàn bộ mã từ SimpleFIN Bridge. + token_compromised: Mã thiết lập có thể đã bị xâm phạm, hết hạn hoặc đã được sử dụng. Vui lòng tạo mã mới. + create_failed: "Kết nối thất bại: %{message}" + unexpected: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại. + destroy: + success: Kết nối SimpleFIN sẽ được gỡ bỏ + update: + success: Kết nối SimpleFIN đã được cập nhật thành công! Các tài khoản của bạn đang được kết nối lại. + errors: + blank_token: Vui lòng nhập mã thiết lập SimpleFIN. + invalid_token: Mã thiết lập không hợp lệ. Vui lòng kiểm tra rằng bạn đã sao chép toàn bộ mã từ SimpleFIN Bridge. + token_compromised: Mã thiết lập có thể đã bị xâm phạm, hết hạn hoặc đã được sử dụng. Vui lòng tạo mã mới. + update_failed: "Cập nhật kết nối thất bại: %{message}" + unexpected: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại. + edit: + setup_token: + label: "Mã thiết lập SimpleFIN:" + placeholder: "Dán mã thiết lập SimpleFIN của bạn vào đây..." + help_text: "Mã phải là một chuỗi dài bắt đầu bằng chữ cái và số" + title: Cập nhật kết nối SimpleFIN + header_subtitle: Lấy mã thiết lập mới để kết nối lại tài khoản SimpleFIN của bạn + connection_needs_update: "Kết nối SimpleFIN của bạn cần được cập nhật:" + step_1_html: "Truy cập SimpleFIN Bridge để tạo mã thiết lập mới" + step_2: Sao chép mã và dán vào bên dưới + step_3: "Nhấn \"Cập nhật\" để khôi phục quyền truy cập" + update: Cập nhật + cancel: Hủy + setup_accounts: + title: Thiết lập tài khoản SimpleFIN của bạn + header_subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản SimpleFIN:" + account_type_checking_savings: Tài khoản thanh toán hoặc tiết kiệm + account_type_checking_savings_desc: Tài khoản ngân hàng thông thường + account_type_credit_card: Thẻ tín dụng + account_type_credit_card_desc: Tài khoản thẻ tín dụng + account_type_investment: Đầu tư + account_type_investment_desc: "Tài khoản Brokerage, 401(k), IRA" + account_type_loan: Vay hoặc thế chấp + account_type_loan_desc: Tài khoản nợ + account_type_other_asset: Tài sản khác + account_type_other_asset_desc: Tất cả các loại khác + transaction_history_title: "Lịch sử giao dịch:" + transaction_history_description_html: "SimpleFIN thường cung cấp 60-90 ngày lịch sử giao dịch, tùy thuộc vào ngân hàng của bạn. Sau khi thiết lập ban đầu, các giao dịch mới sẽ tự động đồng bộ. Dữ liệu lịch sử có sẵn tùy theo tổ chức và loại tài khoản." + account_type_label: "Loại tài khoản:" + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + cancel: Hủy + account_card: + balance: "Số dư" + activity: + recent: + one: "1 giao dịch • mới nhất %{when}" + other: "%{count} giao dịch • mới nhất %{when}" + dormant: "Không có hoạt động trong %{days} ngày" + empty: "Chưa nhập giao dịch nào" + likely_closed: "Không có hoạt động gần đây và số dư bằng không — thẻ này có thể đã đóng hoặc bị thay thế" + today: "hôm nay" + yesterday: "hôm qua" + days_ago: + one: "1 ngày trước" + other: "%{count} ngày trước" + stale_accounts: + title: "Tài khoản không còn trong SimpleFIN" + description: "Các tài khoản này tồn tại trong cơ sở dữ liệu của bạn nhưng không còn được SimpleFIN cung cấp. Điều này có thể xảy ra khi cấu hình tài khoản thay đổi ở phía trên." + action_prompt: "Bạn muốn làm gì?" + action_delete: "Xóa tài khoản và tất cả giao dịch" + action_move: "Chuyển giao dịch sang:" + action_skip: "Bỏ qua lúc này" + transaction_count: + one: "%{count} giao dịch" + other: "%{count} giao dịch" + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + no_accounts: "Không có tài khoản nào để thiết lập." + success: + one: "Đã tạo thành công %{count} tài khoản SimpleFIN! Các giao dịch và tài sản của bạn đang được nhập trong nền." + other: "Đã tạo thành công %{count} tài khoản SimpleFIN! Các giao dịch và tài sản của bạn đang được nhập trong nền." + stale_accounts_processed: "Tài khoản cũ: %{deleted} đã xóa, %{moved} đã chuyển." + stale_accounts_errors: + one: "%{count} thao tác tài khoản cũ thất bại. Kiểm tra nhật ký để biết chi tiết." + other: "%{count} thao tác tài khoản cũ thất bại. Kiểm tra nhật ký để biết chi tiết." + simplefin_item: + add_new: Thêm kết nối mới + confirm_accept: Xóa kết nối + confirm_body: Thao tác này sẽ xóa vĩnh viễn tất cả tài khoản trong nhóm này và tất cả dữ liệu liên quan. + confirm_title: Xóa kết nối SimpleFIN? + delete: Xóa + deletion_in_progress: "(đang xóa...)" + error: Đã xảy ra lỗi khi đồng bộ dữ liệu + no_accounts_description: Kết nối này chưa có tài khoản nào được đồng bộ. + no_accounts_title: Không tìm thấy tài khoản + requires_update: Kết nối lại + setup_needed: Tài khoản mới sẵn sàng để thiết lập + setup_description: Chọn loại tài khoản cho các tài khoản SimpleFIN mới được nhập. + setup_action: Thiết lập tài khoản mới + setup_accounts_menu: Thiết lập tài khoản + more_accounts_available: + one: "%{count} tài khoản khác có sẵn để thiết lập" + other: "%{count} tài khoản khác có sẵn để thiết lập" + accounts_skipped_tooltip: "Một số tài khoản đã bị bỏ qua do lỗi trong quá trình đồng bộ" + accounts_skipped_label: "Đã bỏ qua: %{count}" + rate_limited_ago: "Bị giới hạn tốc độ (%{time} trước)" + rate_limited_recently: "Bị giới hạn tốc độ gần đây" + status: Đồng bộ lần cuối %{timestamp} trước + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước • %{summary}" + syncing: Đang đồng bộ... + update: Cập nhật + stale_pending_note: "(loại trừ khỏi ngân sách)" + stale_pending_accounts: "trong: %{accounts}" + reconciled_details_note: "(xem tóm tắt đồng bộ để biết chi tiết)" + duplicate_accounts_skipped: "Một số tài khoản đã bị bỏ qua vì trùng lặp — dùng 'Liên kết tài khoản hiện có' để hợp nhất." + select_existing_account: + title: "Liên kết %{account_name} với SimpleFIN" + description: Chọn tài khoản SimpleFIN để liên kết với tài khoản hiện có của bạn + cancel: Hủy + link_account: Liên kết tài khoản + no_accounts_found: "Không tìm thấy tài khoản SimpleFIN nào cho %{moniker} này." + wait_for_sync: Nếu bạn vừa kết nối hoặc đồng bộ, hãy thử lại sau khi quá trình đồng bộ hoàn tất. + unlink_to_move: Để chuyển liên kết, trước tiên hãy hủy liên kết từ menu thao tác của tài khoản. + all_accounts_already_linked: Tất cả tài khoản SimpleFIN có vẻ đã được liên kết. + currently_linked_to: "Hiện đang liên kết với: %{account_name}" + + link_existing_account: + success: Tài khoản đã được liên kết thành công với SimpleFIN + errors: + only_manual: Chỉ tài khoản thủ công mới có thể được liên kết + different_provider: Tài khoản này đang liên kết với nhà cung cấp khác. Hãy hủy liên kết từ nhà cung cấp đó trước, sau đó liên kết với SimpleFIN. + invalid_simplefin_account: Tài khoản SimpleFIN được chọn không hợp lệ + dismiss_replacement_suggestion: + dismissed: Đề xuất thay thế đã bị bỏ qua + replacement_prompt: + title: "Thẻ %{institution} của bạn có thể đã được thay thế" + description: '"%{account_name}" được liên kết với "%{old_name}", vốn không có hoạt động gần đây và số dư bằng không. Một thẻ mới, "%{new_name}", hiện đang hoạt động tại cùng tổ chức. Liên kết lại để giữ nguyên lịch sử của bạn.' + relink: Liên kết lại với thẻ mới + confirm_title: Liên kết lại với thẻ mới? + confirm_body: '"%{account_name}" sẽ được liên kết với "%{new_name}". Lịch sử giao dịch vẫn được giữ; các giao dịch tương lai sẽ đến từ thẻ mới.' + dismiss_aria: Bỏ qua đề xuất thay thế + reconciled_status: + message: + one: "%{count} giao dịch đang chờ trùng lặp đã được đối soát" + other: "%{count} giao dịch đang chờ trùng lặp đã được đối soát" + stale_pending_status: + message: + one: "%{count} giao dịch đang chờ cũ hơn %{days} ngày" + other: "%{count} giao dịch đang chờ cũ hơn %{days} ngày" diff --git a/config/locales/views/snaptrade_items/vi.yml b/config/locales/views/snaptrade_items/vi.yml new file mode 100644 index 000000000..61a95981d --- /dev/null +++ b/config/locales/views/snaptrade_items/vi.yml @@ -0,0 +1,191 @@ +vi: + snaptrade_items: + default_name: "Kết nối SnapTrade" + link_accounts: + use_setup_flow: Sử dụng luồng thiết lập tài khoản + create: + success: "Đã cấu hình SnapTrade thành công." + update: + success: "Đã cập nhật cấu hình SnapTrade thành công." + destroy: + success: "Đã lên lịch xóa kết nối SnapTrade." + connect: + decryption_failed: "Không thể đọc thông tin xác thực SnapTrade. Vui lòng xóa và tạo lại kết nối này." + connection_failed: "Kết nối SnapTrade thất bại: %{message}" + callback: + success: "Đã kết nối brokerage! Vui lòng chọn tài khoản muốn liên kết." + no_item: "Không tìm thấy cấu hình SnapTrade." + complete_account_setup: + success: + one: "Đã liên kết thành công %{count} tài khoản." + other: "Đã liên kết thành công %{count} tài khoản." + partial_success: + one: "Đã liên kết %{count} tài khoản. %{failed_count} liên kết thất bại." + other: "Đã liên kết %{count} tài khoản. %{failed_count} liên kết thất bại." + link_failed: "Liên kết tài khoản thất bại: %{errors}" + no_accounts: "Không có tài khoản nào được chọn để liên kết." + preload_accounts: + not_configured: "SnapTrade chưa được cấu hình." + select_accounts: + not_configured: "SnapTrade chưa được cấu hình." + select_existing_account: + not_found: "Không tìm thấy tài khoản hoặc cấu hình SnapTrade." + title: "Liên kết với tài khoản SnapTrade" + header: "Liên kết tài khoản hiện có" + subtitle: "Chọn tài khoản SnapTrade để liên kết" + no_accounts: "Không có tài khoản SnapTrade chưa liên kết." + connect_hint: "Bạn có thể cần kết nối brokerage trước." + settings_link: "Đi đến Cài đặt nhà cung cấp" + linking_to: "Đang liên kết với tài khoản:" + balance_label: "Số dư:" + link_button: "Liên kết" + cancel_button: "Hủy" + link_existing_account: + success: "Đã liên kết thành công với tài khoản SnapTrade." + failed: "Liên kết tài khoản thất bại: %{message}" + not_found: "Không tìm thấy tài khoản." + connections: + unknown_brokerage: "Brokerage không xác định" + delete_connection: + success: "Đã xóa kết nối thành công. Một slot đã được giải phóng." + failed: "Xóa kết nối thất bại: %{message}" + missing_authorization_id: "Thiếu ID ủy quyền" + api_deletion_failed: "Không thể xóa kết nối khỏi SnapTrade - thiếu thông tin xác thực. Kết nối có thể vẫn tồn tại trong tài khoản SnapTrade của bạn." + delete_orphaned_user: + success: "Đã xóa đăng ký mồ côi thành công." + failed: "Xóa đăng ký mồ côi thất bại." + setup_accounts: + title: "Thiết lập tài khoản SnapTrade" + header: "Thiết lập tài khoản SnapTrade của bạn" + subtitle: "Chọn tài khoản brokerage muốn liên kết" + syncing: "Đang lấy tài khoản của bạn..." + loading: "Đang tải tài khoản từ SnapTrade..." + loading_hint: "Nhấn Làm mới để kiểm tra tài khoản." + refresh: "Làm mới" + info_title: "Dữ liệu đầu tư SnapTrade" + info_holdings: "Tài sản nắm giữ với giá hiện tại và số lượng" + info_cost_basis: "Cơ sở chi phí theo vị thế (nếu có)" + info_activities: "Lịch sử giao dịch với nhãn hoạt động (Mua, Bán, Cổ tức, v.v.)" + info_history: "Lịch sử giao dịch tối đa 3 năm" + free_tier_note: "Gói miễn phí SnapTrade cho phép 5 kết nối brokerage. Kiểm tra bảng điều khiển SnapTrade để xem mức sử dụng hiện tại." + no_accounts_title: "Không tìm thấy tài khoản" + no_accounts_message: "Không tìm thấy tài khoản brokerage nào. Điều này có thể xảy ra nếu bạn đã hủy kết nối hoặc brokerage không được hỗ trợ." + try_again: "Kết nối Brokerage" + back_to_settings: "Quay lại Cài đặt" + available_accounts: "Tài khoản có sẵn" + balance_label: "Số dư:" + account_number: "Tài khoản:" + sync_start_date_label: "Nhập giao dịch từ:" + sync_start_date_help: "Để trống để lấy toàn bộ lịch sử có sẵn" + create_button: "Tạo tài khoản đã chọn" + cancel_button: "Hủy" + creating: "Đang tạo tài khoản..." + done_button: "Xong" + or_link_existing: "Hoặc liên kết với tài khoản hiện có thay vì tạo mới:" + select_account: "Chọn một tài khoản..." + link_button: "Liên kết" + linked_accounts: "Đã liên kết" + linked_to: "Liên kết với:" + snaptrade_item: + accounts_need_setup: + one: "%{count} tài khoản cần thiết lập" + other: "%{count} tài khoản cần thiết lập" + deletion_in_progress: "Đang xóa..." + syncing: "Đang đồng bộ..." + requires_update: "Kết nối cần cập nhật" + error: "Lỗi đồng bộ" + status: "Đồng bộ lần cuối %{timestamp} trước - %{summary}" + status_never: "Chưa bao giờ đồng bộ" + reconnect: "Kết nối lại" + connect_brokerage: "Kết nối Brokerage" + add_another_brokerage: "Kết nối thêm brokerage" + delete: "Xóa" + setup_needed: "Tài khoản cần thiết lập" + setup_description: "Một số tài khoản từ SnapTrade cần được liên kết với tài khoản Sure." + setup_action: "Thiết lập tài khoản" + setup_accounts_menu: "Thiết lập tài khoản" + manage_connections: "Quản lý kết nối" + more_accounts_available: + one: "%{count} tài khoản khác có sẵn để thiết lập" + other: "%{count} tài khoản khác có sẵn để thiết lập" + no_accounts_title: "Chưa phát hiện tài khoản nào" + no_accounts_description: "Kết nối brokerage để nhập tài khoản đầu tư của bạn." + + providers: + snaptrade: + name: "SnapTrade" + connection_description: "Kết nối với brokerage qua SnapTrade (hỗ trợ 25+ sàn)" + description: "SnapTrade kết nối với 25+ brokerage lớn (Fidelity, Vanguard, Schwab, Robinhood, v.v.) và cung cấp lịch sử giao dịch đầy đủ với nhãn hoạt động và cơ sở chi phí." + setup_title: "Hướng dẫn thiết lập:" + step_1_html: "Tạo tài khoản tại dashboard.snaptrade.com" + step_2: "Sao chép Client ID và Consumer Key từ bảng điều khiển" + step_3: "Nhập thông tin xác thực bên dưới và nhấn Lưu" + step_4: "Đi đến trang Tài khoản và dùng 'Kết nối thêm brokerage' để liên kết tài khoản đầu tư" + free_tier_warning: "Gói miễn phí SnapTrade hỗ trợ 5 kết nối brokerage. Nâng cấp trên SnapTrade để có thêm." + client_id_label: "Client ID" + client_id_placeholder: "Nhập Client ID SnapTrade của bạn" + client_id_update_placeholder: "Nhập Client ID mới để cập nhật" + consumer_key_label: "Consumer Key" + consumer_key_placeholder: "Nhập Consumer Key SnapTrade của bạn" + consumer_key_update_placeholder: "Nhập Consumer Key mới để cập nhật" + save_button: "Lưu cấu hình" + update_button: "Cập nhật cấu hình" + status_connected: + one: "%{count} tài khoản từ SnapTrade" + other: "%{count} tài khoản từ SnapTrade" + status_needs_registration: "Đã lưu thông tin xác thực. Hoàn tất thiết lập để kết nối brokerage." + needs_setup: + one: "%{count} cần thiết lập" + other: "%{count} cần thiết lập" + status_ready: "Sẵn sàng kết nối brokerage" + setup_accounts_button: "Thiết lập tài khoản" + connect_button: "Kết nối Brokerage" + connected_brokerages: "Đã kết nối:" + manage_connections: "Quản lý kết nối" + loading_connections: "Đang tải kết nối..." + connections_error: "Tải kết nối thất bại: %{message}" + accounts_count: + one: "%{count} tài khoản" + other: "%{count} tài khoản" + orphaned_connection: "Kết nối mồ côi (không đồng bộ cục bộ)" + needs_linking: "cần liên kết" + no_connections: "Không tìm thấy kết nối brokerage nào." + delete_connection: "Xóa" + delete_connection_title: "Xóa kết nối Brokerage?" + delete_connection_body: "Thao tác này sẽ xóa vĩnh viễn kết nối %{brokerage} khỏi SnapTrade. Tất cả tài khoản từ brokerage này sẽ bị hủy liên kết. Bạn cần kết nối lại để đồng bộ các tài khoản này." + delete_connection_confirm: "Xóa kết nối" + orphaned_users_title: + one: "%{count} đăng ký mồ côi" + other: "%{count} đăng ký mồ côi" + orphaned_users_description: "Đây là các đăng ký người dùng SnapTrade cũ đang sử dụng slot kết nối của bạn. Xóa chúng để giải phóng slot." + orphaned_user: "Đăng ký mồ côi" + delete_orphaned_user: "Xóa" + delete_orphaned_user_title: "Xóa đăng ký mồ côi?" + delete_orphaned_user_body: "Thao tác này sẽ xóa vĩnh viễn người dùng SnapTrade mồ côi này và tất cả kết nối brokerage của họ, giải phóng slot kết nối." + delete_orphaned_user_confirm: "Xóa đăng ký" + + snaptrade_item: + sync_status: + no_accounts: "Không tìm thấy tài khoản" + synced: + one: "%{count} tài khoản đã đồng bộ" + other: "%{count} tài khoản đã đồng bộ" + synced_with_setup: "%{linked} đã đồng bộ, %{unlinked} cần thiết lập" + institution_summary: + none: "Chưa kết nối tổ chức nào" + count: + one: "%{count} tổ chức" + other: "%{count} tổ chức" + brokerage_summary: + none: "Chưa kết nối brokerage nào" + count: + one: "%{count} brokerage" + other: "%{count} brokerage" + syncer: + discovering: "Đang phát hiện tài khoản..." + importing: "Đang nhập tài khoản từ SnapTrade..." + processing: "Đang xử lý tài sản nắm giữ và hoạt động..." + calculating: "Đang tính toán số dư..." + checking_config: "Đang kiểm tra cấu hình tài khoản..." + needs_setup: "%{count} tài khoản cần thiết lập..." + activities_fetching_async: "Các hoạt động đang được lấy trong nền. Quá trình này có thể mất đến một phút đối với kết nối brokerage mới." diff --git a/config/locales/views/sophtron_items/vi.yml b/config/locales/views/sophtron_items/vi.yml new file mode 100644 index 000000000..e6a7ba75c --- /dev/null +++ b/config/locales/views/sophtron_items/vi.yml @@ -0,0 +1,313 @@ +--- +vi: + sophtron_items: + defaults: + name: Kết nối Sophtron + new: + title: Kết nối Sophtron + user_id: ID người dùng + user_id_placeholder: dán ID người dùng Sophtron của bạn vào đây + access_key: Khóa truy cập + access_key_placeholder: dán Khóa truy cập Sophtron của bạn vào đây + connect: Kết nối + cancel: Hủy + create: + success: Kết nối Sophtron đã được tạo thành công + destroy: + success: Kết nối Sophtron đã được xóa + update: + success: Kết nối Sophtron đã được cập nhật thành công! Các tài khoản của bạn đang được kết nối lại. + errors: + blank_user_id: Vui lòng nhập ID người dùng Sophtron. + invalid_user_id: ID người dùng không hợp lệ. Vui lòng kiểm tra rằng bạn đã sao chép toàn bộ ID người dùng từ Sophtron. + user_id_compromised: ID người dùng có thể đã bị xâm phạm, hết hạn hoặc đã được sử dụng. Vui lòng tạo mới. + blank_access_key: Vui lòng nhập Khóa truy cập Sophtron. + invalid_access_key: Khóa truy cập không hợp lệ. Vui lòng kiểm tra rằng bạn đã sao chép toàn bộ Khóa truy cập từ Sophtron. + access_key_compromised: Khóa truy cập có thể đã bị xâm phạm, hết hạn hoặc đã được sử dụng. Vui lòng tạo mới. + update_failed: "Cập nhật kết nối thất bại: %{message}" + unexpected: Đã xảy ra lỗi không mong muốn. Vui lòng thử lại hoặc liên hệ hỗ trợ. + edit: + user_id: + label: "ID người dùng Sophtron:" + placeholder: "Dán ID người dùng Sophtron của bạn vào đây..." + help_text: "ID người dùng phải là một chuỗi dài bắt đầu bằng chữ cái và số" + access_key: + label: "Khóa truy cập Sophtron:" + placeholder: "Dán Khóa truy cập Sophtron của bạn vào đây..." + help_text: "Khóa truy cập phải là một chuỗi dài bắt đầu bằng chữ cái và số" + index: + title: Kết nối Sophtron + loading: + loading_message: Đang tải tài khoản Sophtron... + loading_title: Đang tải + link_accounts: + all_already_linked: + one: "Tài khoản đã chọn (%{names}) đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết: %{names}" + api_error: "Lỗi kết nối API" + invalid_account_names: + one: "Không thể liên kết tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + link_failed: Liên kết tài khoản thất bại + no_accounts_selected: Vui lòng chọn ít nhất một tài khoản + partial_invalid: "Đã liên kết thành công %{created_count} tài khoản, %{already_linked_count} đã được liên kết, %{invalid_count} tài khoản có tên không hợp lệ" + partial_success: "Đã liên kết thành công %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết: %{already_linked_names}" + success: + one: "Đã liên kết thành công %{count} tài khoản" + other: "Đã liên kết thành công %{count} tài khoản" + no_credentials_configured: "Vui lòng cấu hình ID người dùng và Khóa truy cập API Sophtron trước trong Cài đặt nhà cung cấp." + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình khóa API. + no_access_key: Khóa truy cập Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_user_id: ID người dùng Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_institution_connected: Vui lòng kết nối tổ chức ngân hàng với Sophtron trước. + connect: + cancel: Hủy + captcha: Captcha + connect: Kết nối + institution_search_label: Tổ chức + institution_search_placeholder: Tìm theo tên ngân hàng + no_institutions: Không tìm thấy tổ chức phù hợp. + password: Mật khẩu + search: Tìm kiếm + search_too_short: Nhập ít nhất hai ký tự để tìm kiếm. + title: Kết nối tổ chức Sophtron + username: Tên đăng nhập + connect_institution: + api_error: "Kết nối Sophtron thất bại: %{message}" + missing_parameters: Chọn tổ chức và nhập thông tin đăng nhập ngân hàng của bạn. + connection_status: + api_error: "Lỗi kết nối API: %{message}" + attempt: "Lần thử %{attempt} trong %{max}" + check_again: Kiểm tra lại + failed: Sophtron không thể hoàn tất kết nối tổ chức này. + failed_timeout: Sophtron hết thời gian chờ trong khi tổ chức đang hoàn tất đăng nhập. + timeout: Sophtron không hoàn tất kết nối trong thời gian dự kiến. Bạn có thể kiểm tra lại hoặc thử kết nối lại sau. + title: Đang kết nối Sophtron + waiting: Sophtron vẫn đang kết nối với tổ chức của bạn. + mfa: + captcha: Văn bản Captcha + captcha_alt: Sophtron captcha + phone_confirmed: Tôi đã xác nhận qua điện thoại + submit: Gửi + title: Xác minh Sophtron + token: Mã xác minh + submit_mfa: + api_error: "Xác minh thất bại: %{message}" + invalid_security_answers: Câu trả lời bảo mật bị thiếu hoặc quá dài. + unknown_challenge: Bước xác minh Sophtron không xác định. + sophtron_item: + accounts_need_setup: Tài khoản cần thiết lập + automatic_sync: Sử dụng đồng bộ tự động + delete: Xóa kết nối + deletion_in_progress: đang xóa... + error: Lỗi + no_accounts_description: Kết nối này chưa có tài khoản nào được liên kết. + no_accounts_title: Không có tài khoản + manual_sync: Đồng bộ thủ công + manual_sync_action: Yêu cầu đồng bộ thủ công + manual_sync_action_for: "Yêu cầu đồng bộ thủ công cho %{institution}" + automatic_sync_for: "Sử dụng đồng bộ tự động cho %{institution}" + setup_action: Thiết lập tài khoản mới + setup_description: "%{linked} trong số %{total} tài khoản đã liên kết. Chọn loại tài khoản cho các tài khoản Sophtron mới được nhập." + setup_needed: Tài khoản mới sẵn sàng để thiết lập + status: "Đồng bộ %{timestamp} trước" + status_never: Chưa bao giờ đồng bộ + status_with_summary: "Đồng bộ lần cuối %{timestamp} trước • %{summary}" + sync_now: Đồng bộ ngay + syncing: Đang đồng bộ... + total: Tổng cộng + unlinked: Chưa liên kết + preload_accounts: + preload_accounts: tải trước tài khoản + api_error: "Lỗi kết nối API" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + no_credentials_configured: "Vui lòng cấu hình ID người dùng và Khóa truy cập API Sophtron trước trong Cài đặt nhà cung cấp." + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình khóa API. + no_access_key: Khóa truy cập Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_user_id: ID người dùng Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + select_accounts: + accounts_selected: tài khoản đã chọn + api_error: "Lỗi kết nối API" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + cancel: Hủy + configure_name_in_sophtron: Không thể nhập - vui lòng cấu hình tên tài khoản trong Sophtron + description: Chọn tài khoản bạn muốn liên kết với tài khoản %{product_name} của bạn. + link_accounts: Liên kết tài khoản đã chọn + no_accounts_found: Không tìm thấy tài khoản. Vui lòng kiểm tra cấu hình khóa API. + no_access_key: Khóa truy cập Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_user_id: ID người dùng Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_credentials_configured: "Vui lòng cấu hình ID người dùng và Khóa truy cập API Sophtron trước trong Cài đặt nhà cung cấp." + no_institution_connected: Vui lòng kết nối tổ chức ngân hàng với Sophtron trước. + no_name_placeholder: "(Không có tên)" + title: Chọn tài khoản Sophtron + select_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + all_accounts_already_linked: Tất cả tài khoản Sophtron đã được liên kết + api_error: "Lỗi kết nối API" + cancel: Hủy + configure_name_in_sophtron: Không thể nhập - vui lòng cấu hình tên tài khoản trong Sophtron + description: Chọn tài khoản Sophtron để liên kết với tài khoản này. Giao dịch sẽ được đồng bộ và loại bỏ trùng lặp tự động. + link_account: Liên kết tài khoản + no_account_specified: Chưa chỉ định tài khoản + no_accounts_found: Không tìm thấy tài khoản Sophtron. Vui lòng kiểm tra cấu hình khóa API. + no_access_key: Khóa truy cập Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_user_id: ID người dùng Sophtron chưa được cấu hình. Vui lòng cấu hình trong Cài đặt. + no_institution_connected: Vui lòng kết nối tổ chức ngân hàng với Sophtron trước. + no_name_placeholder: "(Không có tên)" + title: "Liên kết %{account_name} với Sophtron" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + link_existing_account: + account_already_linked: Tài khoản này đã được liên kết với nhà cung cấp + api_error: "Lỗi kết nối API" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + invalid_account_name: Không thể liên kết tài khoản không có tên + sophtron_account_already_linked: Tài khoản Sophtron này đã được liên kết với tài khoản khác + sophtron_account_not_found: Không tìm thấy tài khoản Sophtron + missing_parameters: Thiếu tham số bắt buộc + no_institution_connected: Vui lòng kết nối tổ chức ngân hàng với Sophtron trước. + success: "Đã liên kết thành công %{account_name} với Sophtron" + setup_accounts: + account_type_label: "Loại tài khoản:" + all_accounts_linked: "Tất cả tài khoản Sophtron của bạn đã được thiết lập." + api_error: "Lỗi kết nối API" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + fetch_failed: "Tải tài khoản thất bại" + no_accounts_to_setup: "Không có tài khoản nào để thiết lập" + no_access_key: "Khóa truy cập Sophtron chưa được cấu hình. Vui lòng kiểm tra cài đặt kết nối." + no_user_id: "ID người dùng Sophtron chưa được cấu hình. Vui lòng kiểm tra cài đặt kết nối." + no_institution_connected: "Tổ chức Sophtron chưa được kết nối." + account_types: + skip: Bỏ qua tài khoản này + depository: Tài khoản thanh toán hoặc tiết kiệm + credit_card: Thẻ tín dụng + investment: Tài khoản đầu tư + loan: Vay hoặc thế chấp + other_asset: Tài sản khác + subtype_labels: + depository: "Loại phụ tài khoản:" + credit_card: "" + investment: "Loại đầu tư:" + loan: "Loại vay:" + other_asset: "" + subtype_messages: + credit_card: "Thẻ tín dụng sẽ được tự động thiết lập dưới dạng tài khoản thẻ tín dụng." + other_asset: "Không cần tùy chọn bổ sung cho Tài sản khác." + balance: Số dư + cancel: Hủy + choose_account_type: "Chọn đúng loại tài khoản cho mỗi tài khoản Sophtron:" + create_accounts: Tạo tài khoản + creating_accounts: Đang tạo tài khoản... + historical_data_range: "Phạm vi dữ liệu lịch sử:" + subtitle: Chọn đúng loại tài khoản cho các tài khoản đã nhập + sync_start_date_help: Chọn khoảng thời gian lịch sử giao dịch bạn muốn đồng bộ. Tối đa 3 năm lịch sử có sẵn. + sync_start_date_label: "Bắt đầu đồng bộ giao dịch từ:" + title: Thiết lập tài khoản Sophtron của bạn + complete_account_setup: + all_skipped: "Tất cả tài khoản đã bị bỏ qua. Không có tài khoản nào được tạo." + creation_failed: "Tạo tài khoản thất bại" + api_error: "Lỗi kết nối API" + unexpected_error: "Đã xảy ra lỗi không mong muốn" + no_accounts: "Không có tài khoản nào để thiết lập." + success: "Đã tạo thành công %{count} tài khoản." + sync: + already_running: Đồng bộ thủ công Sophtron đang chạy. + api_error: "Đồng bộ thủ công Sophtron thất bại: %{message}" + failed: Đồng bộ thủ công Sophtron thất bại + no_linked_accounts: Tổ chức Sophtron này không có tài khoản nào được liên kết để đồng bộ. + processing_failed: Đồng bộ thủ công Sophtron không thể xử lý các giao dịch đã làm mới. + success: Đã bắt đầu đồng bộ + toggle_manual_sync: + success_disabled: Tổ chức Sophtron sẽ đồng bộ tự động. + success_enabled: Tổ chức Sophtron hiện yêu cầu đồng bộ thủ công. + manual_sync_complete: + close: Đóng + description: Số dư tài khoản sẽ được cập nhật xong trong nền. + message: Các giao dịch đã được tải xuống sau khi xác minh Sophtron. + title: Đã bắt đầu đồng bộ Sophtron + sophtron_setup_required: + title: Cần thiết lập Sophtron + message: > + Để hoàn tất thiết lập kết nối Sophtron của bạn, vui lòng đến trang Cài đặt nhà cung cấp và làm theo hướng dẫn để ủy quyền và cấu hình kết nối Sophtron. + go_to_provider_settings: Đi đến Cài đặt nhà cung cấp + heading: "ID người dùng và Khóa truy cập chưa được cấu hình" + description: "Trước khi liên kết tài khoản Sophtron, bạn cần cấu hình ID người dùng và Khóa truy cập Sophtron." + setup_steps_title: "Các bước thiết lập:" + step_1_html: "Đi đến Cài đặt → Nhà cung cấp đồng bộ ngân hàng" + step_2_html: "Tìm phần Sophtron" + step_3_html: "Nhập ID người dùng và Khóa truy cập Sophtron của bạn" + step_4: "Quay lại đây để liên kết tài khoản" + api_error: + title: "Lỗi kết nối Sophtron" + unable_to_connect: "Không thể kết nối với Sophtron" + institution_unable_to_connect: "Không thể kết nối với tổ chức" + common_issues_title: "Các vấn đề thường gặp:" + incorrect_user_id: "ID người dùng không chính xác: Xác minh ID người dùng trong Cài đặt nhà cung cấp" + invalid_access_key: "Khóa truy cập không hợp lệ: Kiểm tra Khóa truy cập trong Cài đặt nhà cung cấp" + expired_credentials: "Thông tin xác thực hết hạn: Tạo ID người dùng và Khóa truy cập mới từ Sophtron" + network_issue: "Sự cố mạng: Kiểm tra kết nối internet của bạn" + service_down: "Dịch vụ gián đoạn: API Sophtron có thể tạm thời không khả dụng" + bad_credentials: "Thông tin ngân hàng: Kiểm tra tên đăng nhập và mật khẩu có chính xác không" + verification_code: "Mã xác minh: Đảm bảo đã nhập mã mới nhất trước khi hết hạn" + institution_timeout: "Hết thời gian tổ chức: Trang đăng nhập ngân hàng không hoàn tất kịp thời" + unsupported_mfa: "Hỗ trợ MFA: Sophtron có thể không hỗ trợ quy trình xác minh hiện tại của tổ chức này" + check_provider_settings: "Kiểm tra Cài đặt nhà cung cấp" + try_again: "Thử kết nối lại" + select_option: "Chọn %{type}" + subtype: "loại phụ" + type: "loại" + sophtron_panel: + setup_instructions_title: "Hướng dẫn thiết lập:" + setup_instructions: + step_1_html: 'Truy cập Sophtron để lấy thông tin xác thực API' + step_2: "Sao chép ID người dùng và Khóa truy cập từ cài đặt tài khoản Sophtron" + step_3: "Dán thông tin xác thực bên dưới và nhấn Lưu; Sure sẽ tự động tạo hoặc tái sử dụng ID khách hàng Sophtron" + field_descriptions_title: "Mô tả các trường:" + field_descriptions: + user_id_html: "ID người dùng: Thông tin xác thực ID người dùng Sophtron của bạn" + access_key_html: "Khóa truy cập: Thông tin xác thực Khóa truy cập Sophtron của bạn" + base_url_html: "URL cơ sở: URL endpoint API Sophtron, thường là https://api.sophtron.com/api" + fields: + user_id: + label: "ID người dùng" + placeholder_new: "Dán ID người dùng Sophtron của bạn" + placeholder_edit: "••••••••" + access_key: + label: "Khóa truy cập" + placeholder_new: "Dán Khóa truy cập Sophtron của bạn" + placeholder_edit: "••••••••" + base_url: + label: "URL cơ sở" + placeholder: "https://api.sophtron.com/api" + save: "Lưu cấu hình" + update: "Cập nhật cấu hình" + syncer: + manual_sync_required: "Cần đồng bộ thủ công Sophtron cho tổ chức này; bỏ qua các tài khoản đó trong quá trình đồng bộ tự động." + importing_accounts: "Đang nhập tài khoản từ Sophtron..." + checking_account_configuration: "Đang kiểm tra cấu hình tài khoản..." + accounts_need_setup: "%{count} tài khoản cần thiết lập" + processing_transactions: "Đang xử lý giao dịch cho các tài khoản đã liên kết..." + calculating_balances: "Đang tính toán số dư cho các tài khoản đã liên kết..." + sophtron_entry: + processor: + unknown_transaction: "Giao dịch không xác định" + render_connection_timeout: + timeout: "Kết nối hết thời gian chờ. Vui lòng thử lại." + redirect_after_account_link: + invalid_account_names: + one: "Không thể liên kết %{count} tài khoản không có tên" + other: "Không thể liên kết %{count} tài khoản không có tên" + partial_invalid: "Đã liên kết %{created_count} tài khoản. %{already_linked_count} đã liên kết, %{invalid_count} có tên không hợp lệ." + partial_success: "Đã liên kết %{created_count} tài khoản. %{already_linked_count} tài khoản đã được liên kết." + success: + one: "Đã liên kết thành công %{count} tài khoản." + other: "Đã liên kết thành công %{count} tài khoản." + all_already_linked: + one: "Tài khoản đã chọn đã được liên kết" + other: "Tất cả %{count} tài khoản đã chọn đã được liên kết" + link_failed: "Liên kết tài khoản thất bại" + start_manual_sync: + already_running: "Đồng bộ đang chạy." + no_linked_accounts: "Không có tài khoản nào được liên kết để đồng bộ." + api_error: "Lỗi API: %{message}" + start_manual_sync_for_account: + failed: "Đồng bộ tài khoản thất bại" diff --git a/config/locales/views/splits/vi.yml b/config/locales/views/splits/vi.yml new file mode 100644 index 000000000..cbd5fad7b --- /dev/null +++ b/config/locales/views/splits/vi.yml @@ -0,0 +1,47 @@ +--- +vi: + splits: + new: + title: Chia nhỏ giao dịch + description: Chia giao dịch này thành nhiều mục với các danh mục và số tiền khác nhau. + submit: Chia nhỏ giao dịch + cancel: Hủy + add_row: Thêm phần chia + remove_row: Xóa + remaining: Còn lại + amounts_must_match: Tổng số tiền chia phải bằng số tiền giao dịch ban đầu. + name_label: Tên + name_placeholder: Tên phần chia + amount_label: Số tiền + category_label: Danh mục + uncategorized: "(chưa phân loại)" + original_name: "Tên:" + original_date: "Ngày:" + original_amount: "Số tiền" + split_number: "Phần #%{number}" + create: + success: Giao dịch đã được chia nhỏ thành công + not_splittable: Giao dịch này không thể chia nhỏ. + destroy: + success: Giao dịch đã được khôi phục thành công + show: + title: Các mục đã chia + description: Giao dịch này đã được chia thành các mục sau. + button_title: Chia nhỏ giao dịch + button_description: Chia giao dịch này thành nhiều mục với các danh mục và số tiền khác nhau. + button: Chia nhỏ + unsplit_title: Hủy chia nhỏ giao dịch + unsplit_button: Hủy chia nhỏ + unsplit_confirm: Thao tác này sẽ xóa tất cả các mục đã chia và khôi phục giao dịch ban đầu. + edit: + title: Chỉnh sửa phần chia + description: Chỉnh sửa các mục đã chia cho giao dịch này. + submit: Cập nhật phần chia + not_split: Giao dịch này chưa được chia nhỏ. + update: + success: Phần chia đã được cập nhật thành công + child: + title: Một phần của giao dịch chia nhỏ + description: Mục này là một phần của giao dịch đã chia nhỏ. + edit_split: Chỉnh sửa phần chia + unsplit: Hủy chia nhỏ diff --git a/config/locales/views/subscriptions/vi.yml b/config/locales/views/subscriptions/vi.yml new file mode 100644 index 000000000..06c136c0f --- /dev/null +++ b/config/locales/views/subscriptions/vi.yml @@ -0,0 +1,24 @@ +--- +vi: + subscriptions: + self_hosted_alert: "%{product_name} không khả dụng ở chế độ tự lưu trữ." + upgrade: + already_contributing: Bạn đã đang đóng góp. Cảm ơn bạn! + page_title: "Nâng cấp" + account_settings: "Cài đặt tài khoản" + sign_out: "Đăng xuất" + contribute_and_support_sure: "Đóng góp và hỗ trợ Sure" + cta: "Tiếp tục hỗ trợ sự phát triển của codebase này!" + header: + support: "Hỗ trợ" + sure: "Sure" + today: "hôm nay" + redirect_to_stripe: "Ở bước tiếp theo, bạn sẽ được chuyển hướng đến Stripe để xử lý thẻ tín dụng." + trialing: "Dữ liệu của bạn sẽ bị xóa trong %{days} ngày" + trial_over: "Thời gian dùng thử của bạn đã kết thúc" + create: + welcome: "Chào mừng đến với Sure!" + trial_already_used: "Bạn đã bắt đầu hoặc hoàn thành một lần dùng thử. Vui lòng nâng cấp để tiếp tục." + success: + welcome_with_contribution: "Chào mừng đến với Sure! Sự đóng góp của bạn được đánh giá cao." + contribution_failed: "Đã xảy ra sự cố khi xử lý đóng góp của bạn. Vui lòng thử lại." diff --git a/config/locales/views/tag/deletions/vi.yml b/config/locales/views/tag/deletions/vi.yml new file mode 100644 index 000000000..0a63ca01e --- /dev/null +++ b/config/locales/views/tag/deletions/vi.yml @@ -0,0 +1,14 @@ +--- +vi: + tag: + deletions: + create: + deleted: Nhãn đã được xóa + new: + delete_and_leave_uncategorized: Xóa "%{tag_name}" + delete_and_recategorize: Xóa "%{tag_name}" và gán nhãn mới + delete_and_reassign: Xóa và gán lại + delete_tag: Xóa nhãn? + explanation: "%{tag_name} sẽ bị xóa khỏi các giao dịch và các thực thể có thể gắn nhãn khác. Thay vì để chúng không có nhãn, bạn cũng có thể gán một nhãn mới bên dưới." + replacement_tag_prompt: Chọn nhãn + tag: Nhãn diff --git a/config/locales/views/tags/vi.yml b/config/locales/views/tags/vi.yml new file mode 100644 index 000000000..5c4952c48 --- /dev/null +++ b/config/locales/views/tags/vi.yml @@ -0,0 +1,26 @@ +--- +vi: + tags: + create: + created: Nhãn đã được tạo + error: 'Lỗi khi tạo nhãn: %{error}' + destroy: + deleted: Nhãn đã được xóa + destroy_all: + all_deleted: Tất cả nhãn đã được xóa + edit: + edit: Chỉnh sửa nhãn + form: + placeholder: Tên nhãn + index: + empty: Chưa có nhãn nào + new: Nhãn mới + tags: Nhãn + delete_all: Xóa tất cả + new: + new: Nhãn mới + tag: + delete: Xóa + edit: Chỉnh sửa + update: + updated: Nhãn đã được cập nhật diff --git a/config/locales/views/trades/vi.yml b/config/locales/views/trades/vi.yml new file mode 100644 index 000000000..3bd370c16 --- /dev/null +++ b/config/locales/views/trades/vi.yml @@ -0,0 +1,57 @@ +--- +vi: + trades: + form: + account: Tài khoản chuyển (tùy chọn) + account_prompt: Tìm kiếm tài khoản + amount: Số tiền + fee: Phí giao dịch + holding: Mã ticker + holding_optional: Mã ticker (tùy chọn) + price: Giá mỗi cổ phiếu + qty: Số lượng + submit: Thêm giao dịch + ticker_placeholder: AAPL + type: Loại + type_buy: Mua + type_sell: Bán + type_deposit: Nạp tiền + type_withdrawal: Rút tiền + type_dividend: Cổ tức + type_interest: Lãi + dividend_requires_security: Cổ tức yêu cầu phải có chứng khoán + header: + buy: Mua + sell: Bán + dividend: Cổ tức + interest: Lãi + current_market_price_label: Giá thị trường hiện tại + overview: Tổng quan + purchase_price_label: Giá mua + purchase_qty_label: Số lượng mua + symbol_label: Mã chứng khoán + total_return_label: Lãi/lỗ chưa thực hiện + new: + title: Giao dịch mới + show: + additional: Bổ sung + amount_label: Số tiền + buy: Mua + category_label: Danh mục + cost_per_share_label: Giá mỗi cổ phiếu + date_label: Ngày + delete: Xóa + fee_label: Phí giao dịch + delete_subtitle: Hành động này không thể hoàn tác + delete_title: Xóa giao dịch chứng khoán + details: Chi tiết + provider_disabled_warning: "Cập nhật giá tạm dừng — nhà cung cấp %{provider} đã bị tắt. Bật lại trong Cài đặt hoặc ánh xạ lại danh mục nắm giữ sang nhà cung cấp khác." + exclude_subtitle: Giao dịch này sẽ không được đưa vào báo cáo và tính toán + exclude_title: Loại trừ khỏi phân tích + no_category: Không có danh mục + note_label: Ghi chú + note_placeholder: Thêm ghi chú bổ sung tại đây... + quantity_label: Số lượng + sell: Bán + settings: Cài đặt + type_label: Loại diff --git a/config/locales/views/transactions/vi.yml b/config/locales/views/transactions/vi.yml new file mode 100644 index 000000000..0be994d36 --- /dev/null +++ b/config/locales/views/transactions/vi.yml @@ -0,0 +1,340 @@ +--- +vi: + transactions: + bulk_updates: + new: + cancel: Hủy + category_label: Danh mục + category_prompt: Chọn danh mục + date_label: Ngày + header_title: Chỉnh sửa giao dịch + merchant_label: Nhà cung cấp + merchant_prompt: Chọn nhà cung cấp + name_label: Tên + name_placeholder: Nhập tên sẽ được áp dụng cho các giao dịch đã chọn + none: "(không có)" + notes_label: Ghi chú + notes_placeholder: Nhập ghi chú sẽ được áp dụng cho các giao dịch đã chọn + overview: Tổng quan + save: Lưu + tags_label: Nhãn + transactions_section: Giao dịch + unknown_name: Giao dịch không xác định + selection_bar: + duplicate: Nhân đôi + edit: Chỉnh sửa + selected: đã chọn + form: + details: Chi tiết + account: Tài khoản + account_prompt: Chọn tài khoản + amount: Số tiền + category: Danh mục + category_label: Danh mục + category_prompt: Chọn danh mục + date: Ngày + description: Mô tả + description_placeholder: Mô tả giao dịch + expense: Chi tiêu + income: Thu nhập + merchant_label: Nhà cung cấp + none: (không có) + note_label: Ghi chú + note_placeholder: Nhập ghi chú + submit: Thêm giao dịch + tags_label: Nhãn + transfer: Chuyển khoản + create: + created: Đã tạo giao dịch + update: + updated: Đã cập nhật giao dịch + new: + new_transaction: Giao dịch mới + show: + keep_both: Không, giữ cả hai + loan_payment: Thanh toán khoản vay + mark_recurring: Đánh dấu là định kỳ + mark_recurring_subtitle: Theo dõi giao dịch định kỳ này. Mức biến động được tự động tính từ 6 tháng giao dịch tương tự. + mark_recurring_title: Giao dịch định kỳ + merge_duplicate: Có, gộp lại + potential_duplicate_description: Giao dịch đang chờ này có thể giống với giao dịch đã đăng bên dưới. Nếu vậy, hãy gộp lại để tránh tính hai lần. + potential_duplicate_title: Phát hiện trùng lặp có thể + transfer: Chuyển khoản + account_label: Tài khoản + amount: Số tiền + category_label: Danh mục + date_label: Ngày + delete: Xóa + delete_subtitle: Thao tác này xóa vĩnh viễn giao dịch, ảnh hưởng số dư lịch sử và không thể hoàn tác. + delete_title: Xóa giao dịch + details: Chi tiết + attachments: Tệp đính kèm + exclude: Loại trừ + exclude_description: Giao dịch bị loại trừ sẽ bị xóa khỏi tính toán ngân sách và báo cáo. + activity_type: Loại hoạt động + activity_type_description: Loại hoạt động đầu tư (Mua, Bán, Cổ tức, v.v.). Tự động phát hiện hoặc đặt thủ công. + one_time_title: "%{type} một lần" + one_time_description: Giao dịch một lần sẽ bị loại trừ khỏi một số tính toán ngân sách và báo cáo. + convert_to_trade_title: Chuyển đổi thành giao dịch chứng khoán + convert_to_trade_description: Chuyển giao dịch này thành giao dịch Mua hoặc Bán với thông tin chứng khoán để theo dõi danh mục. + convert_to_trade_button: Chuyển đổi thành giao dịch + transfer_matcher_description: Kết nối giao dịch này với giao dịch đối ứng trong tài khoản khác. + pending_duplicate_merger_title: Trùng lặp với giao dịch đã đăng? + pending_duplicate_merger_description: Gộp thủ công giao dịch đang chờ này với phiên bản đã đăng. + pending_duplicate_merger_button: Mở công cụ gộp + merchant_label: Nhà cung cấp + name_label: Tên + nature: Loại + none: "(không có)" + note_label: Ghi chú + note_placeholder: Nhập ghi chú + overview: Tổng quan + settings: Cài đặt + tags_label: Nhãn + tab_transactions: Giao dịch + tab_upcoming: Sắp tới + uncategorized: "(chưa phân loại)" + additional_details: "Thông tin bổ sung" + payee: "Người nhận" + description: "Mô tả" + memo: "Ghi nhớ" + provider_extras: "Thông tin nhà cung cấp" + transfer_or_debt_payment: "Chuyển khoản hay Thanh toán nợ?" + open_matcher: "Mở công cụ khớp" + convert: "Chuyển đổi" + activity_labels: + buy: Mua + sell: Bán + sweep_in: Chuyển vào + sweep_out: Chuyển ra + dividend: Cổ tức + reinvestment: Tái đầu tư + interest: Lãi + fee: Phí + transfer: Chuyển khoản + contribution: Đóng góp + withdrawal: Rút tiền + exchange: Trao đổi + other: Khác + mark_recurring: Đánh dấu là định kỳ + mark_recurring_subtitle: Theo dõi giao dịch định kỳ này. Mức biến động được tự động tính từ 6 tháng giao dịch tương tự. + mark_recurring_title: Giao dịch định kỳ + potential_duplicate_title: Phát hiện trùng lặp có thể + potential_duplicate_description: Giao dịch đang chờ này có thể giống với giao dịch đã đăng bên dưới. Nếu vậy, hãy gộp lại để tránh tính hai lần. + merge_duplicate_button: Có, gộp lại + keep_both: Không, giữ cả hai + split_parent_row: + split_label: "Phân chia" + transfer_match: + auto_matched: Tự động khớp + auto_matched_short: T/K + confirm_match: Xác nhận khớp + payment_confirmed: Thanh toán đã được xác nhận + reject_match: Từ chối khớp + transfer_confirmed: Chuyển khoản đã được xác nhận + transaction: + pending: Đang chờ + pending_tooltip: Giao dịch đang chờ — có thể thay đổi khi được đăng + linked_with_provider: Liên kết với %{provider} + activity_type_tooltip: Loại hoạt động đầu tư + possible_duplicate: Trùng lặp? + potential_duplicate_tooltip: Đây có thể là giao dịch trùng lặp + review_recommended: Xem xét + review_recommended_tooltip: Chênh lệch số tiền lớn — nên xem xét để kiểm tra trùng lặp + split: Phân chia + split_tooltip: Giao dịch này đã được phân chia thành nhiều mục + split_child_tooltip: Một phần của giao dịch phân chia + merge_duplicate: + success: Đã gộp giao dịch thành công + failure: Không thể gộp giao dịch + dismiss_duplicate: + success: Giữ nguyên là các giao dịch riêng biệt + failure: Không thể bỏ qua đề xuất trùng lặp + pending_duplicate_merge: + possible_duplicate: Trùng lặp? + possible_duplicate_short: Trùng? + review_recommended: Xem xét + review_recommended_short: Xem + confirm_title: "Gộp với giao dịch đã đăng (%{posted_amount})" + reject_title: Giữ nguyên là các giao dịch riêng biệt + summary: + total_transactions: Tổng giao dịch + income: Thu nhập + expenses: Chi tiêu + inflow: Dòng tiền vào + outflow: Dòng tiền ra + header: + edit_categories: Chỉnh sửa danh mục + edit_imports: Chỉnh sửa nhập dữ liệu + edit_merchants: Chỉnh sửa nhà cung cấp + edit_tags: Chỉnh sửa nhãn + import: Nhập + index: + title: "Giao dịch" + transaction: giao dịch + transactions: giao dịch + import: Nhập + new_rule: "Quy tắc mới" + edit_rules: "Chỉnh sửa quy tắc" + edit_categories: "Chỉnh sửa danh mục" + edit_tags: "Chỉnh sửa nhãn" + edit_merchants: "Chỉnh sửa nhà cung cấp" + edit_imports: "Chỉnh sửa nhập dữ liệu" + new_transaction: "Giao dịch mới" + categorize_button: + one: "Phân loại (1)" + other: "Phân loại (%{count})" + categorizes: + show: + exit: "Thoát" + skip: "Bỏ qua" + remaining: + one: "Còn 1 giao dịch chưa phân loại" + other: "Còn %{count} giao dịch chưa phân loại" + transaction_count: + one: "1 giao dịch" + other: "%{count} giao dịch" + transactions_hint: "Bỏ chọn để loại trừ giao dịch, hoặc gán danh mục khác trực tiếp trong hàng." + assign_category: "Gán danh mục" + assign_category_prompt: "→ gán" + filter_placeholder: "Tìm kiếm danh mục..." + col_transaction: "Giao dịch" + col_date: "Ngày" + col_amount: "Số tiền" + col_category: "Danh mục" + type_income: "Thu nhập" + type_expense: "Chi tiêu" + create_rule_label: "Tạo quy tắc phân loại" + rule_description_prefix: "Các giao dịch %{type} trong tương lai có tên chứa" + rule_description_suffix: "cũng nên được gán danh mục này." + no_categories: "Không có danh mục phù hợp" + all_done: "Tất cả giao dịch đã được phân loại" + create: + categorized: + one: "1 giao dịch đã được phân loại" + other: "%{count} giao dịch đã được phân loại" + rule_creation_failed: "Giao dịch đã được phân loại, nhưng không thể tạo quy tắc (có thể đã tồn tại)." + entry_row: + include_checkbox: "Bao gồm %{name}" + assign_category_select: "Gán danh mục cho %{name}" + list: + drag_drop_title: Thả CSV để nhập + drag_drop_subtitle: Tải lên giao dịch trực tiếp + transaction: giao dịch + transactions: giao dịch + toggle_recurring_section: Bật/tắt giao dịch định kỳ sắp tới + search: + filters: + account: Tài khoản + date: Ngày + type: Loại + status: Trạng thái + amount: Số tiền + category: Danh mục + tag: Nhãn + merchant: Nhà cung cấp + convert_to_trade: + title: Chuyển đổi thành giao dịch chứng khoán + description: Chuyển giao dịch này thành giao dịch với thông tin chứng khoán + date_label: "Ngày:" + account_label: "Tài khoản:" + amount_label: "Số tiền:" + security_label: Chứng khoán + security_prompt: Chọn chứng khoán... + security_custom: "+ Nhập mã ticker tùy chỉnh" + security_not_listed_hint: Không thấy chứng khoán? Chọn "Nhập mã ticker tùy chỉnh" ở cuối danh sách. + ticker_placeholder: AAPL + ticker_hint: "Nhập mã cổ phiếu/ETF (ví dụ: AAPL, MSFT)" + ticker_search_placeholder: Tìm kiếm mã ticker... + ticker_search_hint: Tìm theo mã ticker hoặc tên công ty, hoặc nhập mã ticker tùy chỉnh + price_mismatch_title: Giá có thể không khớp + price_mismatch_message: "Giá của bạn (%{entered_price}/cổ phiếu) khác đáng kể so với giá thị trường hiện tại của %{ticker} (%{market_price}). Nếu có vẻ sai, bạn có thể đã chọn nhầm chứng khoán — thử \"Nhập mã ticker tùy chỉnh\"." + quantity_label: Số lượng (Cổ phiếu) + quantity_placeholder: ví dụ 20 + quantity_hint: Số cổ phiếu giao dịch + price_label: Giá mỗi cổ phiếu + price_placeholder: ví dụ 52.15 + price_hint: Giá mỗi cổ phiếu (%{currency}) + qty_or_price_hint: Nhập ít nhất số lượng HOẶC giá. Giá trị còn lại sẽ được tính từ số tiền giao dịch (%{amount}). + trade_type_label: Loại giao dịch + trade_type_hint: Mua hoặc Bán cổ phiếu của một chứng khoán + exchange_label: Sàn giao dịch (Tùy chọn) + exchange_placeholder: XNAS + exchange_hint: Để trống để tự động phát hiện + cancel: Hủy + submit: Chuyển đổi thành giao dịch + success: Giao dịch đã được chuyển đổi thành giao dịch chứng khoán + conversion_note: "Chuyển đổi từ giao dịch: %{original_name} (%{original_date})" + errors: + not_investment_account: Chỉ giao dịch trong tài khoản đầu tư mới có thể chuyển đổi + already_converted: Giao dịch này đã được chuyển đổi hoặc loại trừ + enter_ticker: Vui lòng nhập mã ticker + security_not_found: Chứng khoán đã chọn không còn tồn tại. Vui lòng chọn chứng khoán khác. + select_security: Vui lòng chọn hoặc nhập chứng khoán + enter_qty_or_price: Vui lòng nhập số lượng hoặc giá mỗi cổ phiếu. Giá trị còn lại sẽ được tính từ số tiền giao dịch. + invalid_qty_or_price: Số lượng hoặc giá không hợp lệ. Vui lòng nhập giá trị dương hợp lệ. + conversion_failed: "Chuyển đổi giao dịch thất bại: %{error}" + unexpected_error: "Lỗi không mong muốn trong quá trình chuyển đổi: %{error}" + searches: + filters: + date_filter: + start_date: "Ngày bắt đầu" + end_date: "Ngày kết thúc" + amount_filter: + equal_to: Bằng + greater_than: Lớn hơn + less_than: Nhỏ hơn + placeholder: '0' + badge: + expense: Chi tiêu + income: Thu nhập + on_or_after: từ ngày %{date} trở đi + on_or_before: đến ngày %{date} + transfer: Chuyển khoản + confirmed: Đã xác nhận + pending: Đang chờ + type_filter: + expense: Chi tiêu + income: Thu nhập + transfer: Chuyển khoản + status_filter: + confirmed: Đã xác nhận + pending: Đang chờ + menu: + account_filter: Tài khoản + amount_filter: Số tiền + apply: Áp dụng + cancel: Hủy + category_filter: Danh mục + clear_filters: Xóa bộ lọc + date_filter: Ngày + merchant_filter: Nhà cung cấp + status_filter: Trạng thái + tag_filter: Nhãn + type_filter: Loại + search: + equal_to: bằng + greater_than: lớn hơn + less_than: nhỏ hơn + form: + toggle_selection_checkboxes: Bật/tắt tất cả ô chọn + search_placeholder: "Tìm kiếm giao dịch ..." + filter: "Lọc" + attachments: + cannot_exceed: "Không được vượt quá %{count} tệp đính kèm mỗi giao dịch" + uploaded_one: "Đã tải lên tệp đính kèm thành công" + uploaded_many: "Đã tải lên %{count} tệp đính kèm thành công" + failed_upload: "Tải lên tệp đính kèm thất bại: %{error}" + no_files_selected: "Chưa chọn tệp để tải lên" + attachment_deleted: "Đã xóa tệp đính kèm thành công" + failed_delete: "Xóa tệp đính kèm thất bại: %{error}" + upload_failed: "Tải lên tệp đính kèm thất bại. Vui lòng thử lại hoặc liên hệ hỗ trợ." + delete_failed: "Xóa tệp đính kèm thất bại. Vui lòng thử lại hoặc liên hệ hỗ trợ." + upload: "Tải lên" + no_attachments: "Chưa có tệp đính kèm" + select_up_to: "Chọn tối đa %{count} tệp (ảnh hoặc PDF, tối đa %{size}MB mỗi tệp) • %{used}/%{count} đã dùng" + files: + one: "Tệp (1)" + other: "Tệp (%{count})" + browse_to_add: "Duyệt để thêm tệp" + max_reached: "Đã đạt giới hạn tệp tối đa (%{count}/%{max}). Xóa tệp hiện có để tải lên tệp khác." diff --git a/config/locales/views/transfer_matches/vi.yml b/config/locales/views/transfer_matches/vi.yml new file mode 100644 index 000000000..f63ecd84d --- /dev/null +++ b/config/locales/views/transfer_matches/vi.yml @@ -0,0 +1,24 @@ +--- +vi: + transfer_matches: + create: + success: Chuyển khoản đã được tạo + new: + header: + title: Khớp chuyển khoản hoặc thanh toán + subtitle: Khớp giao dịch tương ứng trong tài khoản khác hoặc tạo mới nếu chưa tồn tại. + from_account: Tài khoản nguồn + from_account_named: "Tài khoản nguồn: %{name}" + to_account: Tài khoản đích + to_account_named: "Tài khoản đích: %{name}" + outflow_transaction: Giao dịch chi ra + inflow_transaction: Giao dịch thu vào + create_transfer_match: Tạo khớp chuyển khoản + matching_fields: + select_method: Chọn phương thức khớp giao dịch của bạn. + match_existing_recommended: Khớp giao dịch hiện có (khuyến nghị) + create_new_transaction: Tạo giao dịch mới + matching_method: Phương thức khớp + matching_transaction: Giao dịch khớp + target_account: Tài khoản đích + no_matching_transactions: Chúng tôi không tìm thấy giao dịch nào để khớp từ các tài khoản khác của bạn. Vui lòng chọn một tài khoản và chúng tôi sẽ tạo giao dịch thu vào mới cho bạn. diff --git a/config/locales/views/transfers/vi.yml b/config/locales/views/transfers/vi.yml new file mode 100644 index 000000000..05c23cf04 --- /dev/null +++ b/config/locales/views/transfers/vi.yml @@ -0,0 +1,47 @@ +--- +vi: + transfers: + create: + success: Chuyển khoản đã được tạo + destroy: + success: Chuyển khoản đã được xóa + form: + amount: Số tiền + calculate_rate_tab: Tính tỷ giá ngoại hối + convert_tab: Chuyển đổi với tỷ giá ngoại hối + date: Ngày + destination_amount: Số tiền đích + destination_amount_display: "Số tiền đích: %{amount}" + exchange_rate: Tỷ giá + exchange_rate_display: "Tỷ giá: %{rate}" + exchange_rate_help: Chọn cách nhập số tiền chuyển khoản. + expense: Chi tiêu + from: Từ + income: Thu nhập + select_account: Chọn tài khoản + source_amount: Số tiền nguồn + submit: Tạo chuyển khoản + to: Đến + transfer: Chuyển khoản + new: + title: Chuyển khoản mới + show: + delete: Xóa chuyển khoản + delete_subtitle: Thao tác này sẽ xóa chuyển khoản. Các giao dịch liên quan sẽ không bị xóa. + delete_title: Xóa chuyển khoản? + details: Chi tiết + mark_recurring: Đánh dấu là định kỳ + mark_recurring_subtitle: Theo dõi chuyển khoản này như một mẫu định kỳ trong nguồn cấp sắp tới và trang định kỳ. + mark_recurring_title: Đánh dấu chuyển khoản là định kỳ + note_label: Ghi chú + note_placeholder: Thêm ghi chú cho chuyển khoản này + overview: Tổng quan + settings: Cài đặt + from: Từ + to: Đến + date: Ngày + amount: Số tiền + category: Danh mục + uncategorized: Chưa phân loại + update: + success: Chuyển khoản đã được cập nhật diff --git a/config/locales/views/users/vi.yml b/config/locales/views/users/vi.yml new file mode 100644 index 000000000..805405f6d --- /dev/null +++ b/config/locales/views/users/vi.yml @@ -0,0 +1,29 @@ +--- +vi: + users: + destroy: + success: Tài khoản của bạn đã được xóa. + update: + email_change_failed: Không thể thay đổi địa chỉ email. + email_change_initiated: Vui lòng kiểm tra địa chỉ email mới của bạn để xác nhận thay đổi. + success: Hồ sơ của bạn đã được cập nhật. + resend_confirmation_email: + success: Email xác nhận mới đã được xếp vào hàng chờ gửi. + no_pending_change: Hiện không có thay đổi email nào đang chờ xử lý! + reset: + success: Tài khoản của bạn đã được đặt lại. Dữ liệu sẽ được xóa trong nền sau một thời gian. + unauthorized: Bạn không được phép thực hiện hành động này + reset_with_sample_data: + success: Tài khoản của bạn đã được đặt lại và dữ liệu mẫu đang được chuẩn bị. Bạn sẽ thấy dữ liệu demo trong giây lát. + roles: + admin: Quản trị viên + member: Thành viên + super_admin: Quản trị viên cấp cao + user_menu: + aria_label: Mở menu tài khoản + version: Phiên bản + settings: Cài đặt + changelog: Nhật ký thay đổi + feedback: Phản hồi + contact: Liên hệ + log_out: Đăng xuất diff --git a/config/locales/views/valuations/vi.yml b/config/locales/views/valuations/vi.yml new file mode 100644 index 000000000..e5635bf4a --- /dev/null +++ b/config/locales/views/valuations/vi.yml @@ -0,0 +1,60 @@ +--- +vi: + valuations: + confirmation_contents: + this_will: "Thao tác này sẽ %{action_verb} giá trị tài khoản vào" + to_colon: "thành:" + total_account_value: Tổng giá trị tài khoản + holdings_value: Giá trị danh mục nắm giữ + brokerage_cash: Tiền mặt môi giới + account_balance: số dư tài khoản + credit_card_balance: số dư thẻ tín dụng + loan_balance: số dư khoản vay + property_value: giá trị bất động sản + vehicle_value: giá trị xe + crypto_balance: số dư tiền mã hóa + asset_value: giá trị tài sản + liability_balance: số dư nợ phải trả + balance: số dư + "on": "vào" + to: "thành" + recalculate_notice: "Tất cả giao dịch và số dư trong tương lai sẽ được tính lại dựa trên %{change_or_update} này." + change: thay đổi + update: cập nhật + create: + account_updated: Tài khoản đã được cập nhật + update: + account_updated: Tài khoản đã được cập nhật + entry_updated: Mục nhập đã được cập nhật + errors: + amount_required: Số tiền là bắt buộc + form: + amount: Số tiền + submit: Thêm cập nhật số dư + header: + balance: Số dư + index: + change: thay đổi + date: ngày + new_entry: Mục nhập mới + no_valuations: Chưa có định giá nào cho tài khoản này + valuations: Giá trị + value: giá trị + new: + title: Số dư mới + show: + amount: Số tiền + amount_label: Giá trị tài khoản vào ngày + date_label: Ngày + delete: Xóa + delete_subtitle: Hành động này không thể hoàn tác + delete_title: Xóa mục nhập + details: Chi tiết + name_label: Tên + name_placeholder: Nhập tên cho mục nhập này + note_label: Ghi chú + note_placeholder: Thêm bất kỳ thông tin chi tiết nào về mục nhập này + overview: Tổng quan + settings: Cài đặt + opening_balance: "Số dư đầu kỳ" + update_value: Cập nhật giá trị diff --git a/config/locales/views/vehicles/vi.yml b/config/locales/views/vehicles/vi.yml new file mode 100644 index 000000000..44d5a0522 --- /dev/null +++ b/config/locales/views/vehicles/vi.yml @@ -0,0 +1,35 @@ +--- +vi: + vehicles: + edit: + edit: Chỉnh sửa %{account} + form: + make: Hãng xe + make_placeholder: Toyota + mileage: Số dặm + mileage_placeholder: '15000' + mileage_unit: Đơn vị + model: Mẫu xe + model_placeholder: Camry + year: Năm sản xuất + year_placeholder: '2023' + new: + title: Nhập thông tin xe + overview: + current_price: Giá hiện tại + make_model: Hãng & Mẫu xe + mileage: Số dặm + purchase_price: Giá mua + trend: Xu hướng + unknown: Không xác định + year: Năm sản xuất + tabs: + overview: + current_price: Giá hiện tại + make_model: Hãng & Mẫu xe + mileage: Số dặm + purchase_price: Giá mua + trend: Xu hướng + unknown: Không xác định + year: Năm sản xuất + edit_account_details: "Chỉnh sửa thông tin tài khoản"