diff --git a/server/bundles/io.cloudbeaver.server/plugin.xml b/server/bundles/io.cloudbeaver.server/plugin.xml
index 224950ed31..848b7d6783 100644
--- a/server/bundles/io.cloudbeaver.server/plugin.xml
+++ b/server/bundles/io.cloudbeaver.server/plugin.xml
@@ -62,4 +62,8 @@
+
+
+
+
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java
index 5b3b5b9d92..731f01a938 100644
--- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java
@@ -31,6 +31,7 @@ import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -136,6 +137,8 @@ public class WebServerConfig {
@Property
public WebServerLanguage[] getSupportedLanguages() {
List langs = PlatformLanguageRegistry.getInstance().getLanguages();
+ // FIXME: remove hardcoded ordering
+ langs.sort(Comparator.comparingInt(x -> x.getCode().equals("vi") ? 1 : -1));
WebServerLanguage[] webLangs = new WebServerLanguage[langs.size()];
for (int i = 0; i < webLangs.length; i++) {
webLangs[i] = new WebServerLanguage(langs.get(i));
diff --git a/webapp/packages/core-administration/src/AdministrationLocaleService.ts b/webapp/packages/core-administration/src/AdministrationLocaleService.ts
index ba5c98f6a8..000ad5f56d 100644
--- a/webapp/packages/core-administration/src/AdministrationLocaleService.ts
+++ b/webapp/packages/core-administration/src/AdministrationLocaleService.ts
@@ -28,6 +28,8 @@ export class AdministrationLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-administration/src/locales/vi.ts b/webapp/packages/core-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..b4f0708944
--- /dev/null
+++ b/webapp/packages/core-administration/src/locales/vi.ts
@@ -0,0 +1,8 @@
+export default [
+ ['administration_menu_enter', 'Quản trị'],
+ ['administration_menu_back', 'Quay lại ứng dụng'],
+ ['administration_configuration_wizard_title', 'Cấu hình Khởi tạo Server'],
+ ['administration_configuration_wizard_finish_success_title', 'Server đã được cấu hình'],
+ ['administration_configuration_wizard_finish_success_message', 'Bạn có thể đăng nhập với vai trò quản trị viên để thiết lập các tham số bổ sung.'],
+ ['core_administration_configuration_wizard_finish_fail_title', 'Không thể cấu hình server'],
+];
diff --git a/webapp/packages/core-app/src/AppLocaleService.ts b/webapp/packages/core-app/src/AppLocaleService.ts
index 8d5fb6df62..c90f75e51c 100644
--- a/webapp/packages/core-app/src/AppLocaleService.ts
+++ b/webapp/packages/core-app/src/AppLocaleService.ts
@@ -28,6 +28,8 @@ export class AppLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-app/src/locales/vi.ts b/webapp/packages/core-app/src/locales/vi.ts
new file mode 100644
index 0000000000..bf995d316c
--- /dev/null
+++ b/webapp/packages/core-app/src/locales/vi.ts
@@ -0,0 +1,11 @@
+export default [
+ ['app_shared_settingsMenu_config', 'Cấu hình'],
+ ['app_shared_settingsMenu_theme', 'Giao diện'],
+ ['app_shared_settingsMenu_lang', 'Ngôn ngữ'],
+ ['app_shared_inlineEditor_dialog_title', 'Chế độ chỉnh sửa'],
+ ['app_shared_inlineEditor_dialog_apply', 'Áp dụng'],
+ ['app_shared_inlineEditor_dialog_cancel', 'Hủy'],
+ ['app_shared_navigationTabsBar_placeholder', 'Không có đối tượng để hiển thị. Nhấp đúp vào một đối tượng trong cây điều hướng để mở nó.'],
+ ['app_shared_sql_generators_panel_title', 'Tạo SQL'],
+ ['app_shared_sql_generators_dialog_title', 'SQL đã tạo'],
+];
diff --git a/webapp/packages/core-authentication/src/LocaleService.ts b/webapp/packages/core-authentication/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-authentication/src/LocaleService.ts
+++ b/webapp/packages/core-authentication/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-authentication/src/locales/vi.ts b/webapp/packages/core-authentication/src/locales/vi.ts
new file mode 100644
index 0000000000..3ee0143777
--- /dev/null
+++ b/webapp/packages/core-authentication/src/locales/vi.ts
@@ -0,0 +1,9 @@
+export default [
+ ['core_authentication_auth_settings_group', 'Xác thực'],
+ ['settings_authentication_disable_anonymous_access_name', 'Tắt truy cập ẩn danh'],
+ ['settings_authentication_disable_anonymous_access_description', 'Tắt chức năng truy cập ẩn danh'],
+ ['core_authentication_password_policy_min_length', 'Mật khẩu phải dài ít nhất {arg:min} ký tự'],
+ ['core_authentication_password_policy_upper_lower_case', 'Mật khẩu phải chứa cả chữ hoa và chữ thường'],
+ ['core_authentication_password_policy_min_digits', 'Mật khẩu phải chứa ít nhất {arg:min} chữ số'],
+ ['core_authentication_password_policy_min_special_characters', 'Mật khẩu phải chứa ít nhất {arg:min} ký tự đặc biệt'],
+];
diff --git a/webapp/packages/core-blocks/src/BlocksLocaleService.ts b/webapp/packages/core-blocks/src/BlocksLocaleService.ts
index 9026444e25..28a365aaf3 100644
--- a/webapp/packages/core-blocks/src/BlocksLocaleService.ts
+++ b/webapp/packages/core-blocks/src/BlocksLocaleService.ts
@@ -28,6 +28,8 @@ export class BlocksLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-blocks/src/locales/vi.ts b/webapp/packages/core-blocks/src/locales/vi.ts
new file mode 100644
index 0000000000..180b8cf829
--- /dev/null
+++ b/webapp/packages/core-blocks/src/locales/vi.ts
@@ -0,0 +1,15 @@
+export default [
+ ['core_block_properties_table_name', 'Tên'],
+ ['core_block_properties_table_value', 'Giá trị'],
+ ['core_block_properties_table_filter_name', 'Lọc'],
+ ['core_block_properties_table_add', 'Thêm thuộc tính'],
+ ['core_blocks_confirmation_dialog_title', 'Yêu cầu xác nhận'],
+ ['core_blocks_properties_table_item_reset', 'Đặt về mặc định'],
+ ['core_blocks_object_property_info_form_empty_placeholder', 'Thuộc tính trống'],
+ ['core_blocks_object_property_info_password_saved', 'Giá trị trường đã lưu'],
+ ['core_blocks_properties_table_item_remove', 'Xóa thuộc tính'],
+ ['combobox_no_results_placeholder', 'Không có kết quả'],
+ ['core_blocks_exception_message_error_title', 'Không thể hiển thị nội dung'],
+ ['core_blocks_exception_message_error_message', 'Đã xảy ra lỗi.'],
+ ['core_blocks_custom_input_validation_error', 'Giá trị trường không hợp lệ'],
+];
diff --git a/webapp/packages/core-browser-settings/src/LocaleService.ts b/webapp/packages/core-browser-settings/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-browser-settings/src/LocaleService.ts
+++ b/webapp/packages/core-browser-settings/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-browser-settings/src/locales/vi.ts b/webapp/packages/core-browser-settings/src/locales/vi.ts
new file mode 100644
index 0000000000..cde3465163
--- /dev/null
+++ b/webapp/packages/core-browser-settings/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['core_browser_settings_cookies_settings_group', 'Cookies'],
+ ['core_browser_settings_browser_settings_group', 'Trình duyệt'],
+];
diff --git a/webapp/packages/core-connections/src/ConnectionsLocaleService.ts b/webapp/packages/core-connections/src/ConnectionsLocaleService.ts
index d6b43f4c67..0c52a1b53e 100644
--- a/webapp/packages/core-connections/src/ConnectionsLocaleService.ts
+++ b/webapp/packages/core-connections/src/ConnectionsLocaleService.ts
@@ -30,6 +30,8 @@ export class ConnectionsLocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-connections/src/locales/vi.ts b/webapp/packages/core-connections/src/locales/vi.ts
new file mode 100644
index 0000000000..93f5690fee
--- /dev/null
+++ b/webapp/packages/core-connections/src/locales/vi.ts
@@ -0,0 +1,101 @@
+export default [
+ ['core_connections_connections_settings_group', 'Kết nối'],
+ ['connections_administration_item', 'Mẫu Kết nối'],
+ ['connections_administration_connection_create', 'Thêm Mẫu Cơ sở Dữ liệu'],
+ ['connections_administration_search_database_tip', "Nhập danh sách máy chủ tại đây, ví dụ: 'localhost host1.myhost.com 192.168.0.1' và nhấn Enter"],
+ ['connections_administration_new_connection', 'Tạo kết nối mới'],
+ ['connections_administration_connection_save_error', 'Lỗi lưu kết nối'],
+ ['connections_administration_connection_access_empty', 'Không có người dùng hoặc nhóm nào khả dụng'],
+ ['connections_administration_configuration_wizard_step_title', 'Các kết nối cơ sở dữ liệu'],
+ ['connections_administration_configuration_wizard_step_description', 'Thêm kết nối cơ sở dữ liệu'],
+ ['connections_administration_configuration_wizard_title', 'Thêm kết nối cơ sở dữ liệu'],
+ [
+ 'connections_administration_configuration_wizard_message',
+ 'Tại đây, bạn có thể tạo kết nối cơ sở dữ liệu theo cách thủ công hoặc sử dụng tính năng tìm kiếm máy chủ cơ sở dữ liệu.\nBạn có thể bỏ qua bước này và cấu hình kết nối sau.',
+ ],
+ ['connections_administration_connection_no_information', 'Không có thông tin'],
+ ['connections_administration_delete_confirmation', 'Bạn sẽ xóa các kết nối sau: '],
+ ['connections_administration_tools_add_tooltip', 'Thêm mẫu mới'],
+ ['connections_administration_tools_refresh_tooltip', 'Làm mới danh sách kết nối'],
+ ['connections_administration_tools_delete_tooltip', 'Xóa các kết nối đã chọn'],
+ ['connections_administration_tools_refresh_success', 'Danh sách kết nối đã được làm mới'],
+ ['connections_administration_tools_refresh_fail', 'Làm mới danh sách kết nối thất bại'],
+ ['connections_database_authentication', 'Xác thực Cơ sở Dữ liệu'],
+ ['connections_connection_edit_not_own_deny', 'Bạn không có quyền chỉnh sửa kết nối này.'],
+ ['connections_connection_connect', 'Kết nối'],
+ ['connections_connection_create_custom', 'Tùy chỉnh'],
+ ['connections_connection_create_search_database', 'Tìm kiếm'],
+ ['connections_connection_authentication_save_credentials_for_session', 'Không hỏi lại trong phiên làm việc'],
+ ['connections_connection_authentication_save_credentials_for_session_tooltip', 'Thông tin xác thực sẽ bị xóa sau khi đăng xuất'],
+ ['connections_connection_authentication_save_credentials_for_user', 'Lưu thông tin xác thực cho người dùng hiện tại'],
+ ['connections_connection_authentication_save_credentials_for_user_tooltip', 'Thông tin xác thực này sẽ được sử dụng để kết nối tự động'],
+ ['connections_connection_edit_save_credentials_shared', 'Lưu thông tin xác thực cho tất cả người dùng có quyền truy cập'],
+ [
+ 'connections_connection_edit_save_credentials_shared_tooltip',
+ 'Thông tin xác thực này sẽ được sử dụng để kết nối tự động cho tất cả người dùng có quyền truy cập',
+ ],
+ ['connections_connection_share_credentials', 'Chia sẻ thông tin xác thực với nhóm'],
+ ['connections_connection_share_credentials_tooltip', 'Thông tin xác thực này sẽ được sử dụng để kết nối tự động cho tất cả người dùng trong nhóm'],
+ ['connections_connection_credentials_provisioning', 'Thông tin xác thực'],
+ ['connections_connection_credentials_provisioning_description', 'Bạn cần điền hoặc xác nhận thông tin xác thực để kiểm tra kết nối này'],
+ ['connections_connection_edit_authentication', 'Xác thực'],
+ ['connections_connection_edit_access', 'Quyền truy cập'],
+ ['connections_connection_edit_access_load_failed', 'Không thể tải quyền truy cập kết nối'],
+ ['connections_connection_edit_access_team', 'Nhóm'],
+ ['connections_connection_edit_search', 'Tìm kiếm'],
+ ['connections_connection_edit_search_hosts', 'Tên máy chủ'],
+ ['connections_connection_address', 'Địa chỉ'],
+ ['connections_connection_folder', 'Thư mục'],
+ ['connections_connection_folder_validation', 'Tên thư mục không được chứa các ký tự sau / : " \\ \' <> | ? * và không được bắt đầu bằng dấu chấm'],
+ ['connections_connection_name', 'Tên kết nối'],
+ ['connections_connection_access_user_or_team_name', 'Tên người dùng hoặc nhóm'],
+ ['connections_connection_access_filter_placeholder', 'Tìm kiếm tên người dùng hoặc nhóm'],
+ ['connections_connection_access_admin_info', 'Quản trị viên có thể thấy tất cả kết nối, trừ các kết nối riêng tư của người dùng khác.'],
+ ['connections_connection_description', 'Mô tả'],
+ ['connections_connection_project', 'Dự án'],
+ ['connections_connection_driver', 'Trình điều khiển'],
+ ['connections_connection_configuration', 'Cấu hình'],
+ ['connections_connection_host', 'Máy chủ'],
+ ['connections_connection_port', 'Cổng'],
+ ['connections_connection_template', 'Mẫu'],
+ ['core_connections_connection_create_success', 'Kết nối đã được tạo'],
+ ['core_connections_connection_update_success', 'Kết nối đã được cập nhật'],
+ ['connections_connection_test', 'Kiểm tra'],
+ ['connections_connection_test_tooltip', 'Kiểm tra kết nối'],
+ ['connections_connection_test_fail', 'Kiểm tra kết nối thất bại'],
+ ['connections_connection_create_fail', 'Tạo kết nối thất bại'],
+ ['connections_connection_save_fail', 'Lưu kết nối thất bại'],
+ ['connections_connection_expert_settings', 'Cài đặt nâng cao'],
+ ['connections_connection_keep_alive', 'Giữ kết nối (tính bằng giây)'],
+ ['connections_connection_read_only', 'Kết nối chỉ đọc'],
+ ['connections_connection_autocommit', 'Tự động commit'],
+ ['connections_connection_keep_alive_tooltip', 'Không tự động ngắt kết nối'],
+ ['connections_network_handler_test', 'Kiểm tra Tunnel'],
+ ['connections_network_handler_test_fail', 'Kiểm tra tunnel thất bại'],
+ ['connections_network_handler_test_success', 'Kiểm tra tunnel thành công'],
+ ['connections_network_handler_default_title', 'Trình xử lý mạng'],
+ ['connections_network_handler_default_user', 'Người dùng'],
+ ['connections_network_handler_default_password', 'Mật khẩu'],
+ ['connections_network_handler_ssh_tunnel_title', 'Tunnel SSH'],
+ ['connections_network_handler_ssh_tunnel_enable', 'Sử dụng Tunnel SSH'],
+ ['connections_network_handler_ssh_tunnel_host', 'Máy chủ'],
+ ['connections_network_handler_ssh_tunnel_port', 'Cổng'],
+ ['connections_network_handler_ssh_tunnel_user', 'Người dùng'],
+ ['connections_network_handler_ssh_tunnel_password', 'Mật khẩu'],
+ ['connections_network_handler_ssh_tunnel_auth_type', 'Phương thức xác thực'],
+ ['connections_network_handler_ssh_tunnel_private_key', 'Khóa riêng'],
+ ['connections_network_handler_ssh_tunnel_advanced_settings', 'Cài đặt nâng cao'],
+ ['connections_network_handler_ssh_tunnel_advanced_settings_alive_interval', 'Khoảng thời gian giữ kết nối (ms)'],
+ ['connections_network_handler_ssh_tunnel_advanced_settings_connect_timeout', 'Thời gian chờ kết nối (ms)'],
+ ['connections_driver_search_placeholder', 'Nhập tên trình điều khiển (driver)...'],
+ ['connections_not_found', 'Không tìm thấy kết nối cơ sở dữ liệu'],
+ [
+ 'cloud_connections_access_placeholder',
+ 'Kết nối Cloud sẽ hiển thị cho tất cả người dùng. Quản lý quyền truy cập có thể được cấu hình trong "AWS Management Console".',
+ ],
+ ['core_connections_settings_disable', 'Tắt'],
+ ['core_connections_settings_disable_description', 'Tắt khả năng tạo kết nối mới'],
+ ['connections_templates_deprecated_message', 'Kết nối mẫu đã bị ngừng hỗ trợ và sẽ bị xóa trong các phiên bản tương lai'],
+ ['core_connections_connection_driver_not_installed', 'Trình điều khiển (driver) chưa được cài đặt'],
+ ['core_connections_connection_temporary', 'Kết nối tạm thời'],
+];
diff --git a/webapp/packages/core-events/src/LocaleService.ts b/webapp/packages/core-events/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-events/src/LocaleService.ts
+++ b/webapp/packages/core-events/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-events/src/locales/vi.ts b/webapp/packages/core-events/src/locales/vi.ts
new file mode 100644
index 0000000000..64b0eda496
--- /dev/null
+++ b/webapp/packages/core-events/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['core_events_notifications_settings_group', 'Thông báo'],
+ ['core_events_notifications_settings_pool_size', 'Số lượng thông báo tối đa'],
+ ['core_events_notifications_settings_pool_size_description', 'Khi vượt quá số lượng này, các thông báo cũ nhất sẽ bị xóa'],
+];
diff --git a/webapp/packages/core-localization/src/LocalizationService.ts b/webapp/packages/core-localization/src/LocalizationService.ts
index d35ede094e..1898b22036 100644
--- a/webapp/packages/core-localization/src/LocalizationService.ts
+++ b/webapp/packages/core-localization/src/LocalizationService.ts
@@ -137,6 +137,12 @@ export class LocalizationService extends Bootstrap {
name: 'French',
nativeName: 'Français',
},
+ {
+ isoCode: 'vi',
+ name: 'Vietnamese',
+ nativeName: 'Tiếng Việt',
+ },
+
]);
this.addProvider(this.coreProvider.bind(this));
}
@@ -187,6 +193,8 @@ export class LocalizationService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-localization/src/locales/vi.ts b/webapp/packages/core-localization/src/locales/vi.ts
new file mode 100644
index 0000000000..06ceac2420
--- /dev/null
+++ b/webapp/packages/core-localization/src/locales/vi.ts
@@ -0,0 +1,159 @@
+export default [
+ ['name', 'vi'],
+ ['ui_rename_taken_or_invalid', 'Tên không khả dụng hoặc không hợp lệ'],
+ ['ui_tag_new', 'Mới'],
+ ['ui_light_theme', 'Sáng'],
+ ['ui_dark_theme', 'Tối'],
+ ['ui_stepper_back', 'Quay lại'],
+ ['ui_stepper_next', 'Tiếp theo'],
+ ['ui_stepper_finish', 'Hoàn tất'],
+ ['ui_load_more', 'Tải thêm'],
+ ['ui_processing_connecting', 'Đang kết nối...'],
+ ['ui_processing_loading', 'Đang tải...'],
+ ['ui_processing_cancel', 'Hủy'],
+ ['ui_processing_canceling', 'Đang hủy...'],
+ ['ui_processing_canceled', 'Đã hủy'],
+ ['ui_processing_reload', 'Tải lại'],
+ ['ui_processing_retry', 'Thử lại'],
+ ['ui_processing_ok', 'Đồng ý'],
+ ['ui_processing_create', 'Tạo'],
+ ['ui_processing_save', 'Lưu'],
+ ['ui_processing_saving', 'Đang lưu...'],
+ ['ui_processing_do_you_want_to_proceed', 'Bạn có muốn tiếp tục không?'],
+ ['ui_processing_saved', 'Đã lưu'],
+ ['ui_processing_stop', 'Dừng'],
+ ['ui_processing_skip', 'Bỏ qua'],
+ ['ui_second_first_form', '{arg:interval} giây'],
+ ['ui_second_second_form', '{arg:interval} giây'],
+ ['ui_second_third_form', '{arg:interval} giây'],
+ ['ui_minute_first_form', '{arg:interval} phút'],
+ ['ui_minute_second_form', '{arg:interval} phút'],
+ ['ui_minute_third_form', '{arg:interval} phút'],
+ ['ui_please_retry', 'Vui lòng thử lại'],
+ ['ui_custom', 'Tùy chỉnh'],
+ ['ui_configure', 'Cấu hình'],
+ ['ui_apply', 'Áp dụng'],
+ ['ui_cancel', 'Hủy'],
+ ['ui_reject', 'Từ chối'],
+ ['ui_ignore', 'Bỏ qua'],
+ ['ui_unexpected_error', 'Lỗi không mong muốn'],
+ ['ui_error', 'Lỗi'],
+ ['ui_error_message', 'Lỗi:'],
+ ['ui_error_close', 'Đóng'],
+ ['ui_clear', 'Xóa'],
+ ['ui_remove', 'Xóa'],
+ ['ui_close', 'Đóng'],
+ ['ui_open', 'Mở'],
+ ['ui_errors_details', 'Chi tiết'],
+ ['ui_search', 'Tìm kiếm...'],
+ ['ui_delete', 'Xóa'],
+ ['ui_enable', 'Bật'],
+ ['ui_security_warning', 'Cảnh báo bảo mật'],
+ ['ui_deleting', 'Đang xóa...'],
+ ['ui_add', 'Thêm'],
+ ['ui_revert', 'Hoàn tác'],
+ ['ui_undo', 'Hoàn tác'],
+ ['ui_redo', 'Làm lại'],
+ ['ui_duplicate', 'Sao chép'],
+ ['ui_refresh', 'Làm mới'],
+ ['ui_data_saving_error', 'Lỗi lưu dữ liệu'],
+ ['ui_data_remove_confirmation', 'Xác nhận xóa'],
+ ['ui_data_delete_confirmation', 'Xác nhận xóa'],
+ ['ui_no_matches_placeholder', 'Tìm kiếm của bạn không có kết quả phù hợp.'],
+ ['ui_information', 'Thông tin'],
+ ['ui_clipboard', 'Clipboard'],
+ ['ui_copy_to_clipboard', 'Sao chép'],
+ ['ui_copy_to_clipboard_copied', 'Đã sao chép'],
+ ['ui_copy_to_clipboard_failed_to_copy', 'Sao chép thất bại'],
+ ['ui_clipboard_access_denied_title', 'Truy cập Clipboard từ chối'],
+ ['ui_clipboard_access_denied_message', 'Bạn cần cấp quyền truy cập Clipboard để sử dụng một số tính năng của ứng dụng'],
+ ['ui_reveal_password', 'Hiển thị hoặc ẩn mật khẩu'],
+ ['ui_capslock_on', 'Caps Lock đang bật'],
+ ['ui_page_not_found', 'Không tìm thấy trang'],
+ ['ui_revoke', 'Thu hồi'],
+ ['ui_grant', 'Cấp quyền'],
+ ['ui_edit', 'Chỉnh sửa'],
+ ['ui_open_in_tab', 'Mở trong tab'],
+ ['ui_rename', 'Đổi tên'],
+ ['ui_create', 'Tạo'],
+ ['ui_create_processing', 'Đang tạo...'],
+ ['ui_folder', 'Thư mục'],
+ ['ui_folder_new', 'Thư mục mới'],
+ ['ui_folder_new_default_name', 'Thư mục mới'],
+ ['ui_rename_processing', 'Đang đổi tên...'],
+ ['ui_interval', 'Khoảng thời gian'],
+ ['ui_name', 'Tên'],
+ ['ui_value', 'Giá trị'],
+ ['ui_description', 'Mô tả'],
+ ['ui_cant_delete_item', 'Không thể xóa mục này'],
+ ['ui_no_items_placeholder', 'Chưa có mục nào.'],
+ ['ui_search_no_result_placeholder', 'Không tìm thấy kết quả.'],
+ ['ui_save_reminder', 'Bạn có các thay đổi chưa được lưu.'],
+ ['ui_yes', 'Có'],
+ ['ui_no', 'Không'],
+ ['ui_select_all', 'Chọn tất cả'],
+ ['ui_reconnect', 'Kết nối lại'],
+ ['ui_forget', 'Quên'],
+ ['ui_set', 'Thiết lập'],
+ ['ui_restore', 'Khôi phục'],
+ ['ui_are_you_sure', 'Bạn có chắc chắn không?'],
+ ['ui_options', 'Tùy chọn'],
+ ['ui_changes_might_be_lost', 'Các thay đổi của bạn có thể bị mất'],
+ ['ui_file', 'Tệp'],
+ ['ui_changes_will_be_lost', 'Các thay đổi của bạn sẽ bị mất'],
+ ['ui_continue', 'Tiếp tục'],
+ ['ui_authentication', 'Xác thực'],
+ ['ui_settings', 'Cài đặt'],
+ ['ui_advanced_settings', 'Cài đặt nâng cao'],
+ ['ui_expand', 'Mở rộng'],
+ ['ui_close_all', 'Đóng tất cả'],
+ ['ui_close_others', 'Đóng các tab khác'],
+ ['ui_close_all_to_the_right', 'Đóng tất cả bên phải'],
+ ['ui_close_all_to_the_left', 'Đóng tất cả bên trái'],
+ ['ui_or', 'hoặc'],
+ ['ui_download', 'Tải xuống'],
+ ['ui_download_file', 'Tải tệp'],
+ ['ui_upload', 'Tải lên'],
+ ['ui_import', 'Nhập'],
+ ['ui_view', 'Xem'],
+ ['ui_show_more', 'Hiển thị thêm'],
+ ['ui_limit', 'Giới hạn'],
+ ['ui_file_size', 'Kích thước tệp'],
+ ['ui_processing_synchronization', 'Đang đồng bộ...'],
+ ['ui_no_file_chosen', 'Chưa chọn tệp'],
+ ['ui_file_size_exceeds', 'Kích thước tệp vượt quá giới hạn. Kích thước tệp: {arg:size}. Kích thước tối đa: {arg:maxSize}'],
+ ['ui_upload_file', 'Tải tệp lên'],
+ ['ui_upload_files', 'Tải các tệp lên'],
+ ['ui_upload_files_duplicate_error', 'Đã tồn tại các tệp trùng tên'],
+ ['ui_upload_file_fail', 'Tải tệp lên thất bại'],
+ ['ui_filter', 'Lọc'],
+ ['ui_disable', 'Tắt'],
+ ['ui_readonly', 'Chỉ đọc'],
+ ['ui_test', 'Kiểm tra'],
+ ['ui_export', 'Xuất'],
+ ['ui_you', 'Bạn'],
+ ['ui_ms', 'ms'],
+ ['ui_not_found', 'Không tìm thấy'],
+ ['ui_connection', 'Kết nối'],
+ ['ui_catalog', 'Danh mục'],
+ ['ui_schema', 'Lược đồ'],
+ ['ui_project', 'Dự án'],
+ ['ui_type', 'Loại'],
+
+ ['root_permission_denied', 'Bạn không có quyền'],
+ ['root_permission_no_permission', 'Bạn không có quyền thực hiện hành động này'],
+ ['app_root_session_expire_warning_title', 'Phiên làm việc sắp hết hạn'],
+ [
+ 'app_root_session_expire_warning_message',
+ 'Phiên làm việc của bạn sẽ hết hạn trong vòng chưa đầy 5 phút. Để tiếp tục làm việc, hãy đóng cửa sổ này.',
+ ],
+ ['app_root_session_expire_warning_button', 'Tôi vẫn ở đây'],
+ ['app_root_session_expired_title', 'Phiên làm việc đã hết hạn'],
+ ['app_root_session_expired_message', 'Phiên làm việc đã hết hạn. Bạn có muốn tải lại không?'],
+ ['app_root_session_expired_reload', 'Tải lại'],
+ ['app_root_server_node_changed_title', 'Ứng dụng đã được khởi động lại'],
+ ['app_root_server_node_changed_message', 'Ứng dụng đã được khởi động lại. Vui lòng tải lại trang.'],
+ ['app_root_quota_exceeded', 'Vượt quá hạn mức'],
+ ['app_root_event_permissions_changed_message', 'Quyền của bạn đã được thay đổi'],
+ ['core_eventsLog_dbeaverErrorDetails', 'Chi tiết lỗi'],
+];
diff --git a/webapp/packages/core-navigation-tree/src/LocaleService.ts b/webapp/packages/core-navigation-tree/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-navigation-tree/src/LocaleService.ts
+++ b/webapp/packages/core-navigation-tree/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-navigation-tree/src/locales/vi.ts b/webapp/packages/core-navigation-tree/src/locales/vi.ts
new file mode 100644
index 0000000000..ad2bb9f21e
--- /dev/null
+++ b/webapp/packages/core-navigation-tree/src/locales/vi.ts
@@ -0,0 +1,9 @@
+export default [
+ ['core_navigation_tree_navigation_tree_settings_group', 'Cây Điều hướng'],
+ ['core_navigation_tree_settings_children_limit', 'Số lượng nodes để tải'],
+ ['core_navigation_tree_settings_children_limit_description', 'Số lượng nodes được tải trong một yêu cầu'],
+ ['core_navigation_tree_settings_editing', 'Đang chỉnh sửa'],
+ ['core_navigation_tree_settings_editing_description', 'Cho phép chỉnh sửa nodes, chẳng hạn như đổi tên'],
+ ['core_navigation_tree_settings_deleting', 'Đang xóa'],
+ ['core_navigation_tree_settings_deleting_description', 'Cho phép xóa nodes'],
+];
diff --git a/webapp/packages/core-projects/src/LocaleService.ts b/webapp/packages/core-projects/src/LocaleService.ts
index e74d5b618b..f8ac0242fd 100644
--- a/webapp/packages/core-projects/src/LocaleService.ts
+++ b/webapp/packages/core-projects/src/LocaleService.ts
@@ -30,6 +30,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-projects/src/locales/vi.ts b/webapp/packages/core-projects/src/locales/vi.ts
new file mode 100644
index 0000000000..ef0f892ddf
--- /dev/null
+++ b/webapp/packages/core-projects/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['core_projects_no_default_project', 'Dự án không tồn tại']];
diff --git a/webapp/packages/core-resource-manager/src/LocaleService.ts b/webapp/packages/core-resource-manager/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-resource-manager/src/LocaleService.ts
+++ b/webapp/packages/core-resource-manager/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-resource-manager/src/locales/vi.ts b/webapp/packages/core-resource-manager/src/locales/vi.ts
new file mode 100644
index 0000000000..bb8124ed4f
--- /dev/null
+++ b/webapp/packages/core-resource-manager/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['core_resource_manager_resource_manager_settings_group', 'Quản lý Tài nguyên']];
diff --git a/webapp/packages/core-settings-localization/src/LocaleService.ts b/webapp/packages/core-settings-localization/src/LocaleService.ts
index e74d5b618b..f8ac0242fd 100644
--- a/webapp/packages/core-settings-localization/src/LocaleService.ts
+++ b/webapp/packages/core-settings-localization/src/LocaleService.ts
@@ -30,6 +30,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-settings-localization/src/locales/vi.ts b/webapp/packages/core-settings-localization/src/locales/vi.ts
new file mode 100644
index 0000000000..062ef528c0
--- /dev/null
+++ b/webapp/packages/core-settings-localization/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['core_settings_localization_settings_locale_label', 'Ngôn ngữ'],
+ ['core_settings_localization_settings_locale_description', 'Ngôn ngữ ứng dụng'],
+];
diff --git a/webapp/packages/core-settings-user/src/LocaleService.ts b/webapp/packages/core-settings-user/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-settings-user/src/LocaleService.ts
+++ b/webapp/packages/core-settings-user/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-settings-user/src/locales/vi.ts b/webapp/packages/core-settings-user/src/locales/vi.ts
new file mode 100644
index 0000000000..d6d1738de6
--- /dev/null
+++ b/webapp/packages/core-settings-user/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/webapp/packages/core-settings/src/LocaleService.ts b/webapp/packages/core-settings/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-settings/src/LocaleService.ts
+++ b/webapp/packages/core-settings/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-settings/src/locales/vi.ts b/webapp/packages/core-settings/src/locales/vi.ts
new file mode 100644
index 0000000000..550893ad4f
--- /dev/null
+++ b/webapp/packages/core-settings/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['core_plugin_interface_settings_group', 'Giao diện'],
+ ['core_plugin_root_settings_group', 'Thiết lập'],
+];
diff --git a/webapp/packages/core-theming/src/LocaleService.ts b/webapp/packages/core-theming/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-theming/src/LocaleService.ts
+++ b/webapp/packages/core-theming/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-theming/src/locales/vi.ts b/webapp/packages/core-theming/src/locales/vi.ts
new file mode 100644
index 0000000000..7665aab62f
--- /dev/null
+++ b/webapp/packages/core-theming/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['core_theming_settings_theme_name', 'Theme'],
+ ['core_theming_settings_theme_description', 'Application color theme'],
+];
diff --git a/webapp/packages/core-ui/src/LocaleService.ts b/webapp/packages/core-ui/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/core-ui/src/LocaleService.ts
+++ b/webapp/packages/core-ui/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-ui/src/locales/vi.ts b/webapp/packages/core-ui/src/locales/vi.ts
new file mode 100644
index 0000000000..25e1839f2b
--- /dev/null
+++ b/webapp/packages/core-ui/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['core_ui_empty', 'Trống'],
+ ['core_ui_form_save_error', 'Đã xảy ra lỗi khi lưu biểu mẫu'],
+ ['core_ui_switch_tab_error', 'Không thể chuyển tab trong khi xác thực biểu mẫu'],
+];
diff --git a/webapp/packages/core-version-update/src/LocaleService.ts b/webapp/packages/core-version-update/src/LocaleService.ts
index b881162aaf..0ba6f7fa1f 100644
--- a/webapp/packages/core-version-update/src/LocaleService.ts
+++ b/webapp/packages/core-version-update/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class VersionUpdateLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-version-update/src/locales/vi.ts b/webapp/packages/core-version-update/src/locales/vi.ts
new file mode 100644
index 0000000000..d37405452b
--- /dev/null
+++ b/webapp/packages/core-version-update/src/locales/vi.ts
@@ -0,0 +1,13 @@
+export default [
+ ['version_update', 'Cập nhật phiên bản'],
+ ['version_update_version_is_up_to_date', 'Phiên bản đã cập nhật mới nhất'],
+ ['version_update_new_version_available', 'Có phiên bản mới'],
+ ['version_update_version_no_info', 'Không có thông tin về phiên bản'],
+ ['version_update_versions_refresh_successful', 'Danh sách phiên bản đã được làm mới thành công'],
+ ['version_update_versions_refresh_fail', 'Làm mới danh sách phiên bản thất bại'],
+ ['version_update_how_to_update', 'Cách cập nhật'],
+ ['version_update_info', 'Thông tin'],
+ ['version_update_instruction', 'Để cập nhật phiên bản, vui lòng làm theo'],
+ ['version_update_instruction_link', 'hướng dẫn'],
+ ['version_update_instruction_link_not_provided', 'Liên kết hướng dẫn không được cung cấp. Vui lòng liên hệ hỗ trợ.'],
+];
diff --git a/webapp/packages/core-version/src/VersionLocaleService.ts b/webapp/packages/core-version/src/VersionLocaleService.ts
index 87fa41e15a..4b9527a854 100644
--- a/webapp/packages/core-version/src/VersionLocaleService.ts
+++ b/webapp/packages/core-version/src/VersionLocaleService.ts
@@ -30,6 +30,8 @@ export class VersionLocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-version/src/locales/vi.ts b/webapp/packages/core-version/src/locales/vi.ts
new file mode 100644
index 0000000000..731306d9b6
--- /dev/null
+++ b/webapp/packages/core-version/src/locales/vi.ts
@@ -0,0 +1,9 @@
+export default [
+ ['version', 'Phiên bản'],
+ ['versions', 'Các phiên bản'],
+ ['version_date', 'Ngày phát hành'],
+ ['version_tag', 'Tag'],
+ ['version_latest', 'Mới nhất'],
+ ['version_current', 'Hiện tại'],
+ ['versions_load_fail', 'Không thể lấy thông tin phiên bản mới nhất của ứng dụng'],
+];
diff --git a/webapp/packages/core-view/src/LocaleService.ts b/webapp/packages/core-view/src/LocaleService.ts
index e74d5b618b..f8ac0242fd 100644
--- a/webapp/packages/core-view/src/LocaleService.ts
+++ b/webapp/packages/core-view/src/LocaleService.ts
@@ -30,6 +30,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/core-view/src/locales/vi.ts b/webapp/packages/core-view/src/locales/vi.ts
new file mode 100644
index 0000000000..06fd00fcb9
--- /dev/null
+++ b/webapp/packages/core-view/src/locales/vi.ts
@@ -0,0 +1,8 @@
+export default [
+ ['core_view_layout', 'Bố cục'],
+ ['core_view_zoom_in', 'Phóng to'],
+ ['core_view_zoom_out', 'Thu nhỏ'],
+ ['core_view_action_create_label', 'Tạo'],
+ ['core_view_action_new_folder', 'Thư mục mới'],
+ ['core_view_action_edit_label', 'Chỉnh sửa'],
+];
diff --git a/webapp/packages/plugin-administration/src/LocaleService.ts b/webapp/packages/plugin-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-administration/src/locales/vi.ts b/webapp/packages/plugin-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..7212476b85
--- /dev/null
+++ b/webapp/packages/plugin-administration/src/locales/vi.ts
@@ -0,0 +1,75 @@
+export default [
+ ['administration_server_configuration_save_confirmation_title', 'Cập nhật cài đặt server'],
+ ['administration_server_configuration_save_confirmation_message', 'Bạn sắp thay đổi các cài đặt quan trọng. Bạn có chắc chắn không?'],
+ ['administration_configuration_wizard_welcome', 'Chào mừng'],
+ ['administration_configuration_wizard_welcome_step_description', 'Chào mừng đến với {alias:product_full_name}'],
+ ['administration_configuration_wizard_welcome_title', 'Chào mừng đến với {alias:product_full_name}, hệ thống quản lý cơ sở dữ liệu đám mây!'],
+ [
+ 'administration_configuration_wizard_welcome_message',
+ 'Trình hướng dẫn cấu hình dễ dàng sẽ dẫn bạn qua một số bước đơn giản để thiết lập server. Bạn cần thiết lập thông tin server và thông tin xác thực quản trị viên. Bạn có thể thiết lập thêm các tham số server sau khi hoàn tất cấu hình dễ dàng.',
+ ],
+ ['administration_configuration_wizard_welcome_note', 'Lưu ý: bạn sẽ có thể thay đổi các tham số cấu hình này sau trong bảng quản trị.'],
+ ['administration_configuration_wizard_configuration', 'Cấu hình Server'],
+ ['administration_configuration_wizard_configuration_step_description', 'Cấu hình server chính'],
+ ['administration_configuration_wizard_configuration_title', 'Bạn có thể cấu hình các tham số server chính tại đây.'],
+ ['administration_configuration_wizard_configuration_save_error', 'Không thể lưu cấu hình server'],
+ [
+ 'administration_configuration_wizard_configuration_message',
+ 'Bạn sẽ có thể thêm các dịch vụ bổ sung sau khi cấu hình server.\n\rQuản trị viên là siêu người dùng có thể cấu hình server, thiết lập kết nối cơ sở dữ liệu, quản lý người dùng khác và nhiều hơn nữa. Vui lòng ghi nhớ mật khẩu đã nhập. Không thể khôi phục mật khẩu quản trị viên tự động.',
+ ],
+ ['administration_configuration_tools_save_tooltip', 'Lưu cấu hình'],
+ ['administration_configuration_tools_cancel_tooltip', 'Đặt lại thay đổi'],
+ ['administration_configuration_wizard_configuration_server_info', 'Thông tin Server'],
+ ['administration_configuration_wizard_configuration_server_name', 'Tên Server'],
+ ['administration_configuration_wizard_configuration_server_url', 'URL Server'],
+ ['administration_configuration_wizard_configuration_server_url_description', 'URL truy cập toàn cục của server'],
+ ['administration_configuration_wizard_configuration_server_info_unsaved_title', 'Cài đặt chưa được lưu'],
+ ['administration_configuration_wizard_configuration_server_info_unsaved_message', 'Cài đặt có thể được lưu trên trang Cấu hình Server'],
+ ['administration_configuration_wizard_configuration_server_info_unsaved_navigate', 'Mở'],
+ ['administration_configuration_wizard_configuration_server_session_lifetime', 'Thời gian phiên, phút'],
+ [
+ 'administration_configuration_wizard_configuration_server_session_lifetime_description',
+ 'Tại đây, bạn có thể chỉ định số phút mà phiên được phép ở trạng thái không hoạt động trước khi hết hạn',
+ ],
+ ['administration_configuration_wizard_configuration_plugins', 'Cấu hình'],
+ ['administration_configuration_wizard_configuration_custom_connections', 'Bật kết nối riêng tư'],
+ ['administration_configuration_wizard_configuration_custom_connections_description', 'Cho phép người dùng tạo kết nối riêng tư'],
+ ['administration_configuration_wizard_configuration_navigation_tree_view', 'Chế độ xem đơn giản của Navigator'],
+ [
+ 'administration_configuration_wizard_configuration_navigation_tree_view_description',
+ 'Theo mặc định, tất cả kết nối mới của người dùng sẽ chỉ chứa thông tin cơ bản trong cây điều hướng',
+ ],
+ ['administration_configuration_wizard_configuration_security', 'Bảo mật'],
+ ['administration_configuration_wizard_configuration_security_admin_credentials', 'Lưu thông tin xác thực'],
+ [
+ 'administration_configuration_wizard_configuration_security_admin_credentials_description',
+ 'Cho phép lưu thông tin xác thực cho các cơ sở dữ liệu được cấu hình sẵn',
+ ],
+ ['administration_configuration_wizard_configuration_security_public_credentials', 'Lưu thông tin xác thực của người dùng'],
+ [
+ 'administration_configuration_wizard_configuration_security_public_credentials_description',
+ 'Cho phép lưu thông tin xác thực cho người dùng không phải quản trị viên',
+ ],
+ ['administration_configuration_wizard_configuration_navigator', 'Navigator'],
+ ['administration_configuration_wizard_configuration_navigator_hide_folders', 'Ẩn Thư mục'],
+ ['administration_configuration_wizard_configuration_navigator_hide_schemas', 'Ẩn Lược đồ'],
+ ['administration_configuration_wizard_configuration_navigator_hide_virtual_model', 'Ẩn Mô hình Ảo'],
+ ['administration_configuration_wizard_configuration_navigator_merge_entities', 'Hợp nhất Thực thể'],
+ ['administration_configuration_wizard_configuration_navigator_show_only_entities', 'Chỉ Thực thể'],
+ ['administration_configuration_wizard_configuration_navigator_show_system_objects', 'Đối tượng Hệ thống'],
+ ['administration_configuration_wizard_configuration_navigator_show_utility_objects', 'Đối tượng Tiện ích'],
+ ['administration_configuration_wizard_step_validation_message', 'Không thể chuyển sang bước tiếp theo'],
+ ['administration_configuration_wizard_finish', 'Xác nhận'],
+ ['administration_configuration_wizard_finish_step_description', 'Xác nhận'],
+ ['administration_configuration_wizard_finish_title', 'Gần hoàn tất.'],
+ [
+ 'administration_configuration_wizard_finish_message',
+ 'Nhấn nút Hoàn tất để hoàn tất cấu hình server. Bạn có thể quay lại các trang trước nếu muốn thay đổi hoặc thêm gì đó.\nKhi cấu hình hoàn tất, tất cả cài đặt đã nhập sẽ được áp dụng cho server của bạn. Bạn sẽ được chuyển hướng đến trang chính để bắt đầu làm việc.\nBạn luôn có thể đăng nhập vào hệ thống với tư cách quản trị viên để thay đổi cài đặt server.',
+ ],
+ ['administration_disabled_drivers_title', 'Trình điều khiển (driver) bị tắt'],
+ ['administration_disabled_drivers_search_placeholder', 'Tìm kiếm trình điều khiển (driver)...'],
+ [
+ 'administration_disabled_drivers_enable_unsafe_driver_message',
+ 'Việc bật trình điều khiển (driver) cơ sở dữ liệu này có thể cho phép truy cập vào các tệp trên server nơi ứng dụng này đang chạy. Điều này có thể làm lộ các tệp hệ thống nhạy cảm hoặc dữ liệu được bảo vệ khác.\n\nChỉ tiếp tục nếu bạn hiểu đầy đủ các rủi ro và tin tưởng vào cấu hình cơ sở dữ liệu. Việc sử dụng trình điều khiển này không được phép hoặc không đúng cách có thể dẫn đến rủi ro bảo mật.\n\nBạn có muốn bật trình điều khiển "{arg:driverName}" không?',
+ ],
+];
diff --git a/webapp/packages/plugin-authentication-administration/src/AuthenticationLocaleService.ts b/webapp/packages/plugin-authentication-administration/src/AuthenticationLocaleService.ts
index 8ef7843abf..87bd08b132 100644
--- a/webapp/packages/plugin-authentication-administration/src/AuthenticationLocaleService.ts
+++ b/webapp/packages/plugin-authentication-administration/src/AuthenticationLocaleService.ts
@@ -28,6 +28,8 @@ export class AuthenticationLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-authentication-administration/src/locales/vi.ts b/webapp/packages/plugin-authentication-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..71bef04fe9
--- /dev/null
+++ b/webapp/packages/plugin-authentication-administration/src/locales/vi.ts
@@ -0,0 +1,139 @@
+export default [
+ ['authentication_administration_user_connections_user_add', 'Tạo Người dùng'],
+ ['authentication_administration_user_connections_user_new', 'Người dùng mới'],
+ ['authentication_administration_user_connections_access_load_fail', 'Tải kết nối được cấp cho người dùng thất bại'],
+ ['authentication_administration_user_connections_access_connections_load_fail', 'Tải kết nối thất bại'],
+ ['authentication_administration_user_connections_access', 'Quyền truy cập Kết nối'],
+ ['authentication_administration_user_connections_access_granted_by', 'Được cấp bởi'],
+ ['authentication_administration_user_connections_access_granted_team', 'Nhóm:'],
+ ['authentication_administration_user_connections_access_granted_directly', 'Trực tiếp'],
+ ['authentication_administration_user_connections_access_granted_unmanaged', 'Không được quản lý'],
+ ['authentication_administration_user_connections_empty', 'Không có kết nối nào khả dụng'],
+ ['authentication_administration_user_origin_empty', 'Không có chi tiết nào khả dụng'],
+ ['authentication_administration_user_info', 'Thông tin'],
+ ['authentication_administration_user_local', 'Người dùng cục bộ'],
+ ['authentication_administration_user_auth_method', 'Phương thức xác thực'],
+ ['authentication_administration_user_auth_methods', 'Các phương thức xác thực'],
+ ['authentication_administration_user_auth_methods_empty', 'Không có phương thức xác thực nào khả dụng'],
+ ['authentication_administration_user_auth_method_no_details', 'Không có chi tiết nào khả dụng'],
+ ['authentication_administration_item', 'Người dùng và Nhóm'],
+ ['authentication_administration_item_users', 'Người dùng'],
+ ['authentication_administration_item_metaParameters', 'Tham số Meta'],
+ ['authentication_administration_tools_add_tooltip', 'Tạo người dùng mới'],
+ ['authentication_administration_tools_refresh_tooltip', 'Làm mới danh sách người dùng'],
+ ['authentication_administration_tools_delete_tooltip', 'Xóa người dùng đã chọn'],
+ ['authentication_administration_tools_refresh_success', 'Danh sách người dùng đã được làm mới'],
+ ['authentication_administration_tools_refresh_fail', 'Cập nhật người dùng thất bại'],
+ ['authentication_administration_user_delete_fail', 'Lỗi xóa người dùng'],
+ ['authentication_administration_user_update_failed', 'Lỗi lưu người dùng'],
+ ['authentication_administration_user_updated', 'Người dùng đã được cập nhật'],
+ ['authentication_administration_user_created', 'Người dùng đã được tạo thành công'],
+ ['authentication_administration_user_create_failed', 'Lỗi tạo người dùng mới'],
+ ['authentication_administration_users_delete_confirmation', 'Bạn sắp xóa các người dùng sau: '],
+ ['authentication_administration_users_filters_search_placeholder', 'Tìm kiếm tên người dùng...'],
+ ['authentication_administration_users_filters_status_enabled', 'BẬT'],
+ ['authentication_administration_users_filters_status_disabled', 'TẮT'],
+ ['authentication_administration_users_filters_status_all', 'TẤT CẢ'],
+ ['authentication_administration_users_empty', 'Không có người dùng nào'],
+ ['authentication_administration_users_delete_user', 'Xóa người dùng'],
+ ['authentication_administration_users_delete_user_fail', 'Xóa người dùng thất bại'],
+ ['authentication_administration_users_delete_user_success', 'Người dùng đã được xóa'],
+ ['authentication_administration_users_disable_user_fail', 'Tắt người dùng thất bại'],
+ ['authentication_administration_users_disable_user_success', 'Người dùng đã được tắt'],
+ [
+ 'authentication_administration_users_delete_user_confirmation_input_description',
+ 'Vui lòng nhập tên người dùng của tài khoản để xác nhận việc xóa.',
+ ],
+ ['authentication_administration_users_delete_user_confirmation_input_placeholder', 'Nhập tên người dùng tại đây...'],
+ [
+ 'authentication_administration_users_delete_user_disable_info',
+ 'Bạn có chắc chắn muốn xóa "{arg:username}" không? Nếu bạn chỉ muốn tạm thời ngăn chặn truy cập, bạn có thể chọn tắt tài khoản thay vì xóa.',
+ ],
+ [
+ 'authentication_administration_users_delete_user_info',
+ 'Xóa tài khoản này sẽ xóa vĩnh viễn tất cả dữ liệu liên quan đến người dùng khỏi hệ thống. Vui lòng xác nhận bạn muốn tiếp tục xóa người dùng "{arg:username}".',
+ ],
+ ['authentication_administration_user_delete_credentials_error', 'Xóa thông tin xác thực của người dùng thất bại'],
+ ['authentication_administration_user_delete_credentials_success', 'Thông tin xác thực của người dùng đã được xóa'],
+ [
+ 'authentication_administration_user_delete_credentials_confirmation_message',
+ 'Bạn có chắc chắn muốn xóa phương thức xác thực "{arg:originName}" khỏi "{arg:userId}" không?',
+ ],
+ ['administration_configuration_wizard_configuration_admin', 'Thông tin xác thực Quản trị viên'],
+ ['administration_configuration_wizard_configuration_admin_name', 'Đăng nhập'],
+ ['administration_configuration_wizard_configuration_admin_password', 'Mật khẩu'],
+ ['administration_configuration_wizard_configuration_anonymous_access', 'Cho phép truy cập ẩn danh'],
+ [
+ 'administration_configuration_wizard_configuration_anonymous_access_description',
+ 'Cho phép làm việc với CloudBeaver mà không cần xác thực người dùng',
+ ],
+ ['administration_configuration_wizard_configuration_authentication_group', 'Cài đặt xác thực'],
+ ['administration_configuration_wizard_configuration_services_group', 'Dịch vụ'],
+ ['administration_configuration_wizard_configuration_services', 'Dịch vụ'],
+ ['administration_configuration_wizard_configuration_authentication', 'Bật xác thực người dùng'],
+ [
+ 'administration_configuration_wizard_configuration_authentication_description',
+ 'Cho phép người dùng xác thực. Nếu không, chỉ truy cập ẩn danh được bật',
+ ],
+ ['administration_identity_providers_tab_title', 'Nhà cung cấp Danh tính'],
+ ['administration_identity_providers_provider', 'Nhà cung cấp'],
+ ['administration_identity_providers_provider_id', 'ID'],
+ ['administration_identity_providers_provider_configuration_name', 'Tên Cấu hình'],
+ ['administration_identity_providers_provider_configuration_disabled', 'Đã tắt'],
+ ['administration_identity_providers_provider_configuration_description', 'Mô tả'],
+ ['administration_identity_providers_provider_configuration_icon_url', 'URL Biểu tượng'],
+ ['administration_identity_providers_provider_configuration_parameters', 'Tham số'],
+ ['administration_identity_providers_provider_configuration_links', 'Liên kết'],
+ ['administration_identity_providers_provider_configuration_links_metadata', 'Tải xuống tệp siêu dữ liệu'],
+ ['administration_identity_providers_wizard_description', 'Thêm nhà cung cấp danh tính'],
+ ['administration_identity_providers_configuration_add', 'Tạo cấu hình'],
+ ['administration_identity_providers_choose_provider_placeholder', 'Chọn nhà cung cấp...'],
+ ['administration_identity_providers_choose_provider_placeholder_empty', 'Không có nhà cung cấp nào khả dụng'],
+ ['administration_identity_providers_add_tooltip', 'Thêm cấu hình mới'],
+ ['administration_identity_providers_refresh_tooltip', 'Làm mới danh sách cấu hình'],
+ ['administration_identity_providers_delete_tooltip', 'Xóa các cấu hình đã chọn'],
+ ['administration_identity_providers_delete_confirmation', 'Bạn sắp xóa các cấu hình sau: '],
+ ['administration_identity_providers_provider_save_error', 'Lỗi lưu cấu hình'],
+ ['administration_identity_providers_provider_create_error', 'Lỗi tạo cấu hình'],
+ ['administration_identity_providers_configuration_list_update_success', 'Danh sách cấu hình đã được làm mới'],
+ ['administration_identity_providers_configuration_list_update_fail', 'Làm mới danh sách cấu hình thất bại'],
+ ['administration_identity_providers_service_link', 'Chỉnh sửa cấu hình'],
+ ['administration_teams_tab_title', 'Nhóm'],
+ ['administration_teams_tab_description', 'Quản lý nhóm'],
+ ['administration_teams_team_creation', 'Tạo Nhóm'],
+ ['administration_teams_team_id', 'ID Nhóm'],
+ ['administration_teams_team_name', 'Tên Nhóm'],
+ ['administration_teams_team_description', 'Mô tả'],
+ ['administration_teams_team_permissions', 'Quyền'],
+ ['administration_teams_team_create_error', 'Lỗi tạo nhóm'],
+ ['administration_teams_team_save_error', 'Lỗi lưu nhóm'],
+ ['administration_teams_team_list_update_success', 'Danh sách nhóm đã được làm mới'],
+ ['administration_teams_team_list_update_fail', 'Làm mới danh sách nhóm thất bại'],
+ ['administration_teams_team_info_created', 'Nhóm đã được tạo'],
+ ['administration_teams_team_info_updated', 'Nhóm đã được cập nhật'],
+ ['administration_teams_team_info_id_invalid', "Trường '{alias:administration_teams_team_id}' không được để trống"],
+ ['administration_teams_team_info_exists', "Nhóm với ID '{arg:teamId}' đã tồn tại"],
+ ['administration_teams_add_tooltip', 'Thêm nhóm mới'],
+ ['administration_teams_refresh_tooltip', 'Làm mới danh sách nhóm'],
+ ['administration_teams_delete_tooltip', 'Xóa các nhóm đã chọn'],
+ ['administration_teams_delete_confirmation', 'Bạn sắp xóa các nhóm sau: '],
+ ['administration_teams_delete_confirmation_users_note', 'Lưu ý rằng người dùng sẽ mất liên kết với nhóm và tất cả quyền liên quan'],
+ ['administration_teams_team_granted_users_tab_title', 'Người dùng'],
+ ['administration_teams_team_granted_users_search_placeholder', 'Tìm kiếm ID người dùng...'],
+ ['administration_teams_team_granted_users_user_id', 'ID Người dùng'],
+ ['administration_teams_team_granted_users_user_name', 'Tên Người dùng'],
+ ['administration_teams_team_granted_users_empty', 'Không có người dùng nào khả dụng'],
+ ['administration_teams_team_granted_users_permission_denied', 'Bạn không thể chỉnh sửa quyền của chính mình'],
+ ['administration_teams_team_granted_connections_tab_title', 'Kết nối'],
+ ['administration_teams_team_granted_connections_search_placeholder', 'Tìm kiếm tên kết nối...'],
+ ['administration_teams_team_granted_connections_empty', 'Không có kết nối nào khả dụng'],
+ ['plugin_authentication_administration_user_team_default_readonly_tooltip', 'Nhóm mặc định. Không thể thu hồi'],
+ ['plugin_authentication_administration_team_default_users_tooltip', 'Nhóm mặc định. Chứa tất cả người dùng'],
+ ['plugin_authentication_administration_team_user_team_role_supervisor', 'Giám sát'],
+ [
+ 'plugin_authentication_administration_team_user_team_role_supervisor_description',
+ 'Giám sát viên có thể xem các truy vấn đã thực hiện của nhóm mình',
+ ],
+ ['plugin_authentication_administration_team_form_edit_label', 'Biểu mẫu chỉnh sửa nhóm'],
+ ['plugin_authentication_administration_user_form_edit_label', 'Biểu mẫu chỉnh sửa người dùng'],
+];
diff --git a/webapp/packages/plugin-authentication/src/AuthenticationLocaleService.ts b/webapp/packages/plugin-authentication/src/AuthenticationLocaleService.ts
index 8ef7843abf..87bd08b132 100644
--- a/webapp/packages/plugin-authentication/src/AuthenticationLocaleService.ts
+++ b/webapp/packages/plugin-authentication/src/AuthenticationLocaleService.ts
@@ -28,6 +28,8 @@ export class AuthenticationLocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-authentication/src/locales/vi.ts b/webapp/packages/plugin-authentication/src/locales/vi.ts
new file mode 100644
index 0000000000..f23c870b6a
--- /dev/null
+++ b/webapp/packages/plugin-authentication/src/locales/vi.ts
@@ -0,0 +1,47 @@
+export default [
+ ['authentication_login_dialog_title', 'Xác thực'],
+ ['authentication_login', 'Đăng nhập'],
+ ['authentication_logout', 'Đăng xuất'],
+ ['authentication_logout_error', 'Không thể đăng xuất'],
+ ['authentication_authenticate', 'Xác thực'],
+ ['authentication_authorizing', 'Đang xác thực...'],
+ ['authentication_auth_federated', 'Liên kết'],
+ ['authentication_auth_force_session_logout', 'Buộc đăng xuất tất cả các phiên khác'],
+ ['authentication_auth_force_session_logout_popup_title', 'Đăng xuất các phiên khác'],
+ ['authentication_auth_force_session_logout_popup_message', 'Tất cả người dùng sẽ bị đăng xuất khỏi tất cả thiết bị. Bạn có muốn tiếp tục không?'],
+ ['authentication_auth_force_session_logout_checkbox_tooltip', 'Để áp dụng tùy chọn này, bạn cần đăng nhập lại'],
+ ['authentication_auth_additional', 'Bổ sung'],
+ ['authentication_select_provider', 'Chọn nhà cung cấp khả dụng'],
+ ['authentication_configure', 'Vui lòng cấu hình các phương thức xác thực'],
+ ['authentication_provider_disabled', 'Phương thức xác thực đã bị tắt'],
+ ['authentication_request_token', 'Yêu cầu xác thực bổ sung'],
+ ['authentication_identity_provider_search_placeholder', 'Tìm kiếm tên cấu hình hoặc mô tả...'],
+ ['authentication_identity_provider_dialog_subtitle', 'Chọn cấu hình bạn muốn sử dụng để đăng nhập'],
+ ['authentication_user_name', 'Tên người dùng'],
+ ['authentication_user_name_description', 'Định danh của người dùng được lưu dưới dạng chữ thường'],
+ ['authentication_user_role', 'Vai trò'],
+ ['authentication_user_credentials', 'Thông tin xác thực'],
+ ['authentication_user_meta_parameters', 'Tham số'],
+ ['authentication_team_meta_parameters', 'Tham số'],
+ ['authentication_user_password', 'Mật khẩu Người dùng'],
+ ['authentication_user_password_repeat', 'Nhập lại Mật khẩu'],
+ ['authentication_user_team', 'Nhóm Người dùng'],
+ ['authentication_user_status', 'Trạng thái Người dùng'],
+ ['authentication_user_enabled', 'Đã bật'],
+ ['authentication_user_login_not_set', 'Đăng nhập không được để trống'],
+ ['authentication_user_team_not_set', 'Phải chọn ít nhất một nhóm'],
+ ['authentication_user_role_not_set', '{alias:authentication_user_role} là bắt buộc'],
+ ['authentication_user_password_not_set', '{alias:authentication_user_password} là bắt buộc'],
+ ['authentication_user_passwords_not_match', 'Mật khẩu không khớp'],
+ ['authentication_user_login_already_exists', 'Người dùng với tên đã tồn tại'],
+ ['authentication_user_login_cant_be_used', 'Xin lỗi, tên không thể sử dụng'],
+ ['authentication_user_icon_tooltip', 'Người dùng'],
+ ['authentication_team_icon_tooltip', 'Nhóm'],
+ ['plugin_authentication_user_loading_error', 'Không thể tải dữ liệu người dùng'],
+ ['plugin_authentication_loading_error_dialog_title', 'Lỗi xác thực'],
+ ['plugin_authentication_loading_error_dialog_message', 'Đã xảy ra lỗi khi tải dữ liệu người dùng. Bạn có muốn đăng xuất không?'],
+ [
+ 'plugin_authentication_authentication_method_disabled',
+ 'Phương thức xác thực đã bị tắt, vui lòng cấu hình các phương thức xác thực trong cài đặt',
+ ],
+];
diff --git a/webapp/packages/plugin-browser/src/LocaleService.ts b/webapp/packages/plugin-browser/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-browser/src/LocaleService.ts
+++ b/webapp/packages/plugin-browser/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-browser/src/locales/vi.ts b/webapp/packages/plugin-browser/src/locales/vi.ts
new file mode 100644
index 0000000000..f263cb20bb
--- /dev/null
+++ b/webapp/packages/plugin-browser/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['plugin_browser_update_dialog_title', 'Đang cài đặt ứng dụng...'],
+ ['plugin_browser_update_dialog_title', 'Đang cài đặt bản cập nhật...'],
+ ['plugin_browser_update_dialog_message', 'Ứng dụng sẽ tự động khởi động lại \n{arg:progress}'],
+];
diff --git a/webapp/packages/plugin-connection-custom/src/LocaleService.ts b/webapp/packages/plugin-connection-custom/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-connection-custom/src/LocaleService.ts
+++ b/webapp/packages/plugin-connection-custom/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-connection-custom/src/locales/vi.ts b/webapp/packages/plugin-connection-custom/src/locales/vi.ts
new file mode 100644
index 0000000000..488001cf98
--- /dev/null
+++ b/webapp/packages/plugin-connection-custom/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['plugin_connection_custom_action_custom_label', 'Kết nối mới']];
diff --git a/webapp/packages/plugin-connection-search/src/LocaleService.ts b/webapp/packages/plugin-connection-search/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-connection-search/src/LocaleService.ts
+++ b/webapp/packages/plugin-connection-search/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-connection-search/src/locales/vi.ts b/webapp/packages/plugin-connection-search/src/locales/vi.ts
new file mode 100644
index 0000000000..df453aaa8b
--- /dev/null
+++ b/webapp/packages/plugin-connection-search/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['plugin_connection_search_action_search_label', 'Tìm cơ sở dữ liệu'],
+ ['plugin_connection_search_settings_disable', 'Tắt "{alias:plugin_connection_search_action_search_label}"'],
+ ['plugin_connection_search_settings_disable_description', 'Tắt khả năng tìm kiếm kết nối tại một địa chỉ cụ thể'],
+];
diff --git a/webapp/packages/plugin-connections/src/LocaleService.ts b/webapp/packages/plugin-connections/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-connections/src/LocaleService.ts
+++ b/webapp/packages/plugin-connections/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-connections/src/locales/vi.ts b/webapp/packages/plugin-connections/src/locales/vi.ts
new file mode 100644
index 0000000000..94fa691298
--- /dev/null
+++ b/webapp/packages/plugin-connections/src/locales/vi.ts
@@ -0,0 +1,49 @@
+export default [
+ ['plugin_connections_new_connection_dialog_title', 'Kết nối mới'],
+ ['plugin_connections_connection_form_part_main', 'Chính'],
+ ['plugin_connections_connection_form_part_properties', 'Thuộc tính Trình điều khiển (driver)'],
+ ['plugin_connections_connection_form_part_main_custom_host', 'Máy chủ'],
+ ['plugin_connections_connection_form_part_main_custom_port', 'Cổng'],
+ ['plugin_connections_connection_form_part_main_custom_server_name', 'Tên máy chủ'],
+ ['plugin_connections_connection_form_part_main_custom_database', 'Cơ sở dữ liệu'],
+ ['plugin_connections_connection_form_part_main_url_jdbc', 'URL JDBC'],
+ ['plugin_connections_connection_form_part_main_folder', 'Thư mục'],
+
+ ['plugin_connections_connection_edit_menu_item_title', 'Chỉnh sửa Kết nối'],
+ ['plugin_connections_connection_edit_cancel_title', 'Xác nhận Hủy'],
+ ['plugin_connections_connection_edit_cancel_message', 'Bạn sắp hủy các thay đổi của kết nối. Các thay đổi chưa lưu sẽ bị mất. Bạn có chắc không?'],
+ ['plugin_connections_connection_edit_reconnect_title', 'Kết nối đã được cập nhật'],
+ ['plugin_connections_connection_edit_reconnect_message', 'Kết nối đã được cập nhật. Bạn có muốn kết nối lại không?'],
+ ['plugin_connections_connection_edit_reconnect_failed', 'Không thể kết nối lại'],
+ ['plugin_connections_connection_folder_move_failed', 'Không thể di chuyển đến thư mục'],
+ ['plugin_connections_connection_folder_move_duplication', 'Thư mục đích hoặc các thư mục được chọn chứa thư mục có cùng tên ({arg:name})'],
+ ['plugin_connections_connection_cloud_auth_required', 'Bạn cần đăng nhập bằng thông tin xác thực "{arg:providerLabel}" để sử dụng kết nối này.'],
+ ['plugin_connections_connection_form_project_invalid', 'Bạn không có quyền tạo kết nối trong dự án đã chọn'],
+ ['plugin_connections_connection_form_host_configuration_invalid', 'Cấu hình máy chủ không được hỗ trợ'],
+ ['plugin_connections_connection_form_name_invalid', "Trường 'Tên kết nối' không được để trống"],
+ ['plugin_connections_connection_form_host_invalid', "Trường 'Máy chủ' không được để trống"],
+ ['plugin_connections_connection_folder_delete_confirmation', 'Bạn sắp xóa "{arg:name}". Các kết nối sẽ không bị xóa. Bạn có chắc không?'],
+ ['plugin_connections_menu_connections_label', 'Kết nối'],
+ ['plugin_connections_action_disconnect_all_label', 'Ngắt tất cả kết nối'],
+ ['plugin_connections_settings', 'Kết nối'],
+ ['plugin_connections_settings_hide_connections_view_name', 'Ẩn kết nối'],
+ ['plugin_connections_settings_hide_connections_view_description', 'Kết nối sẽ được ẩn đối với tất cả người dùng, trừ quản trị viên'],
+
+ ['plugin_connections_connection_ssl_enable', 'Bật SSL'],
+
+ ['plugin_connections_connection_form_shared_credentials_manage_info', 'Bạn có thể quản lý thông tin xác thực trong '],
+ ['plugin_connections_connection_form_shared_credentials_manage_info_tab_link', 'Tab Thông tin xác thực'],
+ [
+ 'plugin_connections_connection_auth_secret_description',
+ 'Có nhiều thông tin xác thực có sẵn để xác thực.\nVui lòng chọn thông tin xác thực bạn muốn sử dụng.',
+ ],
+ ['plugin_connections_connection_create_menu_title', 'Kết nối mới'],
+ [
+ 'plugin_connections_connection_driver_not_installed_message',
+ 'Trình điều khiển (driver) chưa được cài đặt. Bạn có thể cài đặt nó trong phần "Quản trị".',
+ ],
+ ['plugin_connections_connection_established', 'Kết nối đã được thiết lập'],
+ ['plugin_connections_connection_client_version', 'Phiên bản máy khách: {arg:version} \n'],
+ ['plugin_connections_connection_server_version', 'Phiên bản máy chủ: {arg:version} \n'],
+ ['plugin_connections_connection_connection_time', 'Thời gian kết nối: {arg:time} \n'],
+];
diff --git a/webapp/packages/plugin-data-export/src/LocaleService.ts b/webapp/packages/plugin-data-export/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-data-export/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-export/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-export/src/locales/vi.ts b/webapp/packages/plugin-data-export/src/locales/vi.ts
new file mode 100644
index 0000000000..6e44734dc3
--- /dev/null
+++ b/webapp/packages/plugin-data-export/src/locales/vi.ts
@@ -0,0 +1,22 @@
+export default [
+ ['plugin_data_export_data_export_settings_group', 'Xuất dữ liệu'],
+ ['data_transfer_dialog_title', 'Xuất dữ liệu'],
+ ['data_transfer_dialog_export', 'Xuất'],
+ ['data_transfer_dialog_export_tooltip', 'Xuất tập hợp kết quả dưới dạng tệp'],
+ ['data_transfer_dialog_configuration_title', 'Cấu hình xuất'],
+ ['data_transfer_dialog_preparation', 'Chúng tôi đang chuẩn bị tệp của bạn để xuất. Vui lòng đợi...'],
+ ['data_transfer_notification_preparation', 'Chúng tôi đang chuẩn bị tệp của bạn để tải xuống. Vui lòng đợi...'],
+ ['data_transfer_notification_ready', 'Tệp đã sẵn sàng để tải xuống'],
+ ['data_transfer_notification_error', 'Xuất dữ liệu thất bại'],
+ ['data_transfer_notification_cancelled', 'Xuất dữ liệu đã bị hủy'],
+ ['data_transfer_notification_download', 'Tải xuống'],
+ ['data_transfer_notification_delete', 'Xóa'],
+ ['data_transfer_exporting_table', 'Bảng:'],
+ ['data_transfer_exporting_sql', 'SQL:'],
+ ['data_transfer_format_settings', 'Định dạng'],
+ ['data_transfer_dialog_select_processor_fail', 'Không thể chọn bộ xử lý'],
+
+ ['data_transfer_output_settings', 'Đầu ra'],
+ ['data_transfer_output_settings_compress', 'Nén'],
+ ['plugin_data_export_download_process_info', 'Quá trình tải xuống có thể mất một chút thời gian để bắt đầu'],
+];
diff --git a/webapp/packages/plugin-data-import/src/LocaleService.ts b/webapp/packages/plugin-data-import/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-data-import/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-import/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-import/src/locales/vi.ts b/webapp/packages/plugin-data-import/src/locales/vi.ts
new file mode 100644
index 0000000000..90079615cd
--- /dev/null
+++ b/webapp/packages/plugin-data-import/src/locales/vi.ts
@@ -0,0 +1,9 @@
+export default [
+ ['plugin_data_import_title', 'Nhập dữ liệu'],
+ ['plugin_data_import_process_title', 'Đang nhập dữ liệu...'],
+ ['plugin_data_import_process_success', 'Dữ liệu đã được nhập thành công'],
+ ['plugin_data_import_process_fail', 'Nhập dữ liệu thất bại'],
+ ['plugin_data_import_process_file_processing_step_message', 'Tệp đã được tải lên, đang xử lý...'],
+ ['plugin_data_import_disable_data_import_name', 'Tắt Nhập dữ liệu'],
+ ['plugin_data_import_disable_data_import_description', 'Tắt tính năng nhập dữ liệu trong Data Viewer đối với người dùng không phải quản trị viên'],
+];
diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/LocaleService.ts b/webapp/packages/plugin-data-spreadsheet-new/src/LocaleService.ts
index e74d5b618b..f8ac0242fd 100644
--- a/webapp/packages/plugin-data-spreadsheet-new/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-spreadsheet-new/src/LocaleService.ts
@@ -30,6 +30,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/locales/vi.ts b/webapp/packages/plugin-data-spreadsheet-new/src/locales/vi.ts
new file mode 100644
index 0000000000..26b4b0a3b5
--- /dev/null
+++ b/webapp/packages/plugin-data-spreadsheet-new/src/locales/vi.ts
@@ -0,0 +1,27 @@
+export default [
+ ['data_grid_table_empty_placeholder', 'Bảng không chứa cột nào'],
+ ['data_grid_table_editing', 'Chỉnh sửa'],
+ ['data_grid_table_editing_set_to_null', 'Đặt thành NULL'],
+ ['data_grid_table_editing_open_inline_editor', 'Mở trình chỉnh sửa nội tuyến'],
+ ['data_grid_table_editing_row_add', 'Thêm hàng'],
+ ['data_grid_table_editing_row_add_copy', 'Sao chép hàng'],
+ ['data_grid_table_editing_row_delete', 'Xóa hàng hiện tại'],
+ ['data_grid_table_editing_row_revert', 'Hoàn nguyên giá trị'],
+ ['data_grid_table_order', 'Sắp xếp'],
+ ['data_grid_table_open_value_panel', 'Hiển thị trong bảng giá trị'],
+ ['data_grid_table_filter', 'Bộ lọc'],
+ ['data_grid_table_filter_cell_value', 'Giá trị ô'],
+ ['data_grid_table_filter_custom_value', 'Tùy chỉnh'],
+ ['data_grid_table_filter_reset_all_filters', 'Đặt lại tất cả bộ lọc'],
+ ['data_grid_table_disable_order', 'Đã tắt'],
+ ['data_grid_table_disable_all_orders', 'Tắt tất cả'],
+ ['data_grid_table_delete_filters_and_orders', 'Đặt lại bộ lọc / sắp xếp'],
+ ['data_grid_table_tooltip_column_header_order', 'Sắp xếp theo cột'],
+ ['data_grid_table_context_menu_filter_dialog_title', 'Chỉnh sửa giá trị'],
+ ['data_grid_table_context_menu_filter_clipboard_permission', 'Cấp quyền truy cập vào clipboard'],
+ ['data_grid_table_context_menu_save_value_error', 'Không thể lưu giá trị'],
+ ['data_grid_table_index_column_tooltip', 'Chọn toàn bộ bảng'],
+ ['data_grid_table_readonly_tooltip', 'Chỉ đọc'],
+ ['plugin_data_spreadsheet_new_settings_disable', 'Tắt chế độ hiển thị dạng bảng'],
+ ['plugin_data_spreadsheet_new_settings_disable_description', 'Tắt chế độ hiển thị dữ liệu dạng bảng cho tất cả người dùng'],
+];
diff --git a/webapp/packages/plugin-data-viewer-result-set-grouping/src/LocaleService.ts b/webapp/packages/plugin-data-viewer-result-set-grouping/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-data-viewer-result-set-grouping/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-viewer-result-set-grouping/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-viewer-result-set-grouping/src/locales/vi.ts b/webapp/packages/plugin-data-viewer-result-set-grouping/src/locales/vi.ts
new file mode 100644
index 0000000000..9e0b293bf5
--- /dev/null
+++ b/webapp/packages/plugin-data-viewer-result-set-grouping/src/locales/vi.ts
@@ -0,0 +1,17 @@
+export default [
+ ['plugin_data_viewer_result_set_grouping_title', 'Nhóm'],
+ [
+ 'plugin_data_viewer_result_set_grouping_placeholder',
+ 'Không có dữ liệu để hiển thị.\nKéo và thả một cột từ trình xem kết quả để nhóm các giá trị.',
+ ],
+ ['plugin_data_viewer_result_set_grouping_column_delete_tooltip', 'Xóa nhóm theo các cột đã chọn'],
+ ['plugin_data_viewer_result_set_grouping_action_show_duplicates', 'Hiển thị các giá trị trùng lặp'],
+ ['plugin_data_viewer_result_set_grouping_action_show_all', 'Hiển thị tất cả'],
+ ['plugin_data_viewer_result_set_grouping_action_configure', 'Cấu hình'],
+ ['plugin_data_viewer_result_set_grouping_action_configure_tooltip', 'Chỉnh sửa cấu hình nhóm'],
+ ['plugin_data_viewer_result_set_grouping_grouping_configuration', 'Cấu hình nhóm'],
+ ['plugin_data_viewer_result_set_grouping_grouping_columns', 'Cột'],
+ ['plugin_data_viewer_result_set_grouping_grouping_functions', 'Hàm'],
+ ['plugin_data_viewer_result_set_grouping_grouping_columns_placeholder', 'Nhập tên cột mới'],
+ ['plugin_data_viewer_result_set_grouping_grouping_functions_placeholder', 'Nhập hàm (ví dụ: SUM(salary), AVG(score))'],
+];
diff --git a/webapp/packages/plugin-data-viewer-result-trace-details/src/LocaleService.ts b/webapp/packages/plugin-data-viewer-result-trace-details/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-data-viewer-result-trace-details/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-viewer-result-trace-details/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-viewer-result-trace-details/src/locales/vi.ts b/webapp/packages/plugin-data-viewer-result-trace-details/src/locales/vi.ts
new file mode 100644
index 0000000000..c39897e124
--- /dev/null
+++ b/webapp/packages/plugin-data-viewer-result-trace-details/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['plugin_data_viewer_result_trace_details', 'Chi tiết kết quả'],
+ ['plugin_data_viewer_result_trace_no_data_placeholder', 'Không tìm thấy chi tiết theo dõi'],
+];
diff --git a/webapp/packages/plugin-data-viewer/src/LocaleService.ts b/webapp/packages/plugin-data-viewer/src/LocaleService.ts
index e74d5b618b..f8ac0242fd 100644
--- a/webapp/packages/plugin-data-viewer/src/LocaleService.ts
+++ b/webapp/packages/plugin-data-viewer/src/LocaleService.ts
@@ -30,6 +30,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/fr.js')).default;
case 'de':
return (await import('./locales/de.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-data-viewer/src/locales/vi.ts b/webapp/packages/plugin-data-viewer/src/locales/vi.ts
new file mode 100644
index 0000000000..156610913f
--- /dev/null
+++ b/webapp/packages/plugin-data-viewer/src/locales/vi.ts
@@ -0,0 +1,72 @@
+export default [
+ ['plugin_data_viewer_data_viewer_settings_group', 'Trình xem dữ liệu'],
+ ['table_header_sql_expression', 'Nhập biểu thức SQL để lọc kết quả, ví dụ: column_name=10'],
+ ['table_header_sql_expression_not_supported', 'Lọc dữ liệu không được hỗ trợ'],
+ ['data_viewer_tab_title', 'Dữ liệu'],
+ ['data_viewer_value_edit', 'Chỉnh sửa'],
+ ['data_viewer_value_apply', 'Áp dụng'],
+ ['data_viewer_value_revert', 'Hủy'],
+ ['data_viewer_value_revert_title', 'Hủy các thay đổi chưa lưu'],
+ ['data_viewer_nodata_message', 'Không có dữ liệu để hiển thị'],
+ ['data_viewer_statistics_status', 'Trạng thái:'],
+ ['data_viewer_statistics_duration', 'Thời gian:'],
+ ['data_viewer_statistics_updated_rows', 'Số hàng đã cập nhật:'],
+ ['data_viewer_action_refresh', 'Làm mới'],
+ ['data_viewer_action_refresh_tooltip', 'Làm mới dữ liệu'],
+ ['data_viewer_action_auto_refresh_stop_tooltip', 'Dừng làm mới tự động'],
+ ['data_viewer_action_auto_refresh_menu_tooltip', 'Cài đặt làm mới tự động'],
+ ['data_viewer_action_auto_refresh_menu_stop_tooltip', 'Dừng làm mới dữ liệu tự động'],
+ ['data_viewer_action_auto_refresh_menu_configure_tooltip', 'Cấu hình cài đặt làm mới tự động'],
+ ['data_viewer_action_auto_refresh_interval_tooltip', 'Đặt khoảng thời gian làm mới tự động thành {arg:interval}'],
+ ['data_viewer_action_edit_delete', 'Xóa mục đã chọn'],
+ ['data_viewer_action_edit_add', 'Thêm'],
+ ['data_viewer_action_edit_add_copy', 'Sao chép'],
+ ['data_viewer_action_edit_revert', 'Hủy mục đã chọn'],
+ ['data_viewer_result_edited_title', 'Lưu thay đổi'],
+ ['data_viewer_result_edited_message', 'Tập hợp kết quả đã được chỉnh sửa. Bạn có muốn lưu thay đổi vào cơ sở dữ liệu không?'],
+ ['data_viewer_data_save_error_title', 'Xảy ra lỗi khi lưu thay đổi'],
+ ['plugin_data_viewer_auto_refresh_settings', 'Cài đặt làm mới tự động'],
+ ['plugin_data_viewer_auto_refresh_settings_stop_on_error', 'Dừng khi gặp lỗi'],
+ ['data_viewer_presentation_value_no_active_elements', 'Không có ô bảng nào được chọn'],
+ ['data_viewer_presentation_value_title', 'Giá trị'],
+ ['data_viewer_presentation_value_text_line_wrapping_wrap', 'Ngắt dòng'],
+ ['data_viewer_presentation_value_text_line_wrapping_no_wrap', 'Không ngắt dòng'],
+ ['data_viewer_presentation_value_text_title', 'Văn bản'],
+ ['data_viewer_presentation_value_text_plain_title', 'Văn bản'],
+ ['data_viewer_presentation_value_text_html_title', 'HTML'],
+ ['data_viewer_presentation_value_text_xml_title', 'XML'],
+ ['data_viewer_presentation_value_text_json_title', 'JSON'],
+ ['data_viewer_presentation_value_text_hex_title', 'HEX'],
+ ['data_viewer_presentation_value_text_base64_title', 'Base64'],
+ ['data_viewer_presentation_value_image_title', 'Hình ảnh'],
+ ['data_viewer_presentation_value_image_fit', 'Vừa cửa sổ'],
+ ['data_viewer_presentation_value_image_original_size', 'Kích thước gốc'],
+ ['data_viewer_presentation_value_boolean_placeholder', 'Không thể hiển thị giá trị hiện tại dưới dạng boolean'],
+ ['data_viewer_presentation_value_content_truncated_placeholder', 'Giá trị đã bị cắt bớt do'],
+ ['data_viewer_presentation_value_content_download_error', 'Tải xuống thất bại'],
+ ['data_viewer_presentation_value_content_paste_error', 'Không thể tải toàn bộ văn bản'],
+ ['data_viewer_script_preview', 'Kịch bản'],
+ ['data_viewer_script_preview_dialog_title', 'Xem trước thay đổi'],
+ ['data_viewer_script_preview_error_title', 'Không thể lấy kịch bản'],
+ ['data_viewer_refresh_result_set', 'Làm mới tập hợp kết quả'],
+ ['data_viewer_total_count_tooltip', 'Lấy tổng số lượng'],
+ ['data_viewer_total_count_canceled_title', 'Đã hủy tổng số lượng'],
+ ['data_viewer_total_count_canceled_message', 'Câu lệnh đã bị hủy theo yêu cầu của người dùng'],
+ ['data_viewer_total_count_failed', 'Không thể lấy tổng số lượng'],
+ ['data_viewer_model_not_loaded', 'Mô hình bảng chưa được tải'],
+ ['data_viewer_copy_not_allowed', 'Khả năng sao chép dữ liệu đã bị tắt'],
+ ['data_viewer_copy_not_allowed_message', 'Nếu điều này bất ngờ, vui lòng liên hệ quản trị viên'],
+ ['settings_data_editor', 'Trình chỉnh sửa dữ liệu'],
+ ['settings_data_editor_disable_edit_name', 'Tắt chỉnh sửa'],
+ ['settings_data_editor_disable_edit_description', 'Tắt chỉnh sửa dữ liệu trong Trình xem dữ liệu đối với người dùng không phải quản trị viên'],
+ ['settings_data_editor_disable_data_copy_name', 'Tắt sao chép'],
+ ['settings_data_editor_disable_data_copy_description', 'Tắt sao chép dữ liệu trong Trình xem dữ liệu đối với người dùng không phải quản trị viên'],
+ ['settings_data_editor_disable_data_export_name', 'Tắt xuất'],
+ ['settings_data_editor_disable_data_export_description', 'Tắt xuất dữ liệu trong Trình xem dữ liệu đối với người dùng không phải quản trị viên'],
+ ['settings_data_editor_fetch_max_name', 'Kích thước lấy tối đa'],
+ ['settings_data_editor_fetch_max_description', 'Số lượng hàng tối đa để lấy'],
+ ['settings_data_editor_fetch_default_name', 'Kích thước lấy mặc định'],
+ ['settings_data_editor_fetch_default_description', 'Số lượng hàng mặc định để lấy'],
+ ['plugin_data_viewer_no_available_presentation', 'Không có chế độ hiển thị nào khả dụng'],
+ ['plugin_data_viewer_result_set_save_success', 'Lưu thành công'],
+];
diff --git a/webapp/packages/plugin-datasource-context-switch/src/LocaleService.ts b/webapp/packages/plugin-datasource-context-switch/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-datasource-context-switch/src/LocaleService.ts
+++ b/webapp/packages/plugin-datasource-context-switch/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-datasource-context-switch/src/locales/vi.ts b/webapp/packages/plugin-datasource-context-switch/src/locales/vi.ts
new file mode 100644
index 0000000000..711b1a8390
--- /dev/null
+++ b/webapp/packages/plugin-datasource-context-switch/src/locales/vi.ts
@@ -0,0 +1,8 @@
+export default [
+ ['plugin_datasource_context_switch_select_connection', 'Chọn kết nối'],
+ ['plugin_datasource_context_switch_select_container', 'Chọn container'],
+ [
+ 'plugin_datasource_context_switch_select_container_tooltip',
+ 'Các thay đổi sẽ được áp dụng cho tất cả kịch bản đang hoạt động liên quan đến kết nối "{arg:name}"',
+ ],
+];
diff --git a/webapp/packages/plugin-datasource-transaction-manager/src/LocaleService.ts b/webapp/packages/plugin-datasource-transaction-manager/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-datasource-transaction-manager/src/LocaleService.ts
+++ b/webapp/packages/plugin-datasource-transaction-manager/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-datasource-transaction-manager/src/locales/vi.ts b/webapp/packages/plugin-datasource-transaction-manager/src/locales/vi.ts
new file mode 100644
index 0000000000..258557d6f7
--- /dev/null
+++ b/webapp/packages/plugin-datasource-transaction-manager/src/locales/vi.ts
@@ -0,0 +1,21 @@
+export default [
+ ['plugin_datasource_transaction_manager_commit', 'Commit'],
+ ['plugin_datasource_transaction_manager_rollback', 'Hoàn tác'],
+ ['plugin_datasource_transaction_manager_commit_mode_switch_to_auto', 'Chuyển sang commit tự động'],
+ ['plugin_datasource_transaction_manager_commit_mode_switch_to_manual', 'Chuyển sang commit thủ công'],
+ ['plugin_datasource_transaction_manager_commit_fail', 'Không thể commit giao dịch'],
+ ['plugin_datasource_transaction_manager_rollback_fail', 'Không thể hoàn tác giao dịch'],
+ ['plugin_datasource_transaction_manager_commit_mode_fail', 'Không thể thay đổi chế độ commit'],
+ ['plugin_datasource_transaction_manager_commit_confirmation_message', 'Bạn có muốn commit các thay đổi không?'],
+
+ ['plugin_datasource_transaction_manager_logs', 'Nhật ký giao dịch'],
+ ['plugin_datasource_transaction_manager_logs_tooltip', 'Mở nhật ký giao dịch'],
+ ['plugin_datasource_transaction_manager_logs_tooltip_count', 'Tổng số câu lệnh: {arg:count}'],
+ ['plugin_datasource_transaction_manager_logs_counter_none', 'Không có'],
+ ['plugin_datasource_transaction_manager_logs_table_column_time', 'Thời gian'],
+ ['plugin_datasource_transaction_manager_logs_table_column_type', 'Loại'],
+ ['plugin_datasource_transaction_manager_logs_table_column_text', 'Truy vấn'],
+ ['plugin_datasource_transaction_manager_logs_table_column_duration', 'Thời gian thực thi (ms)'],
+ ['plugin_datasource_transaction_manager_logs_table_column_rows', 'Hàng'],
+ ['plugin_datasource_transaction_manager_logs_table_column_result', 'Kết quả'],
+];
diff --git a/webapp/packages/plugin-gis-viewer/src/LocaleService.ts b/webapp/packages/plugin-gis-viewer/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-gis-viewer/src/LocaleService.ts
+++ b/webapp/packages/plugin-gis-viewer/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-gis-viewer/src/locales/vi.ts b/webapp/packages/plugin-gis-viewer/src/locales/vi.ts
new file mode 100644
index 0000000000..9f2a51a2ab
--- /dev/null
+++ b/webapp/packages/plugin-gis-viewer/src/locales/vi.ts
@@ -0,0 +1,6 @@
+export default [
+ ['gis_presentation_title', 'Bản đồ'],
+ ['gis_presentation_placeholder', 'Không có dữ liệu để hiển thị'],
+ ['gis_presentation_base_tile_street_name', 'Đường phố'],
+ ['gis_presentation_base_tile_topography_name', 'Địa hình'],
+];
diff --git a/webapp/packages/plugin-help/src/LocaleService.ts b/webapp/packages/plugin-help/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-help/src/LocaleService.ts
+++ b/webapp/packages/plugin-help/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-help/src/locales/vi.ts b/webapp/packages/plugin-help/src/locales/vi.ts
new file mode 100644
index 0000000000..cdcdca7edb
--- /dev/null
+++ b/webapp/packages/plugin-help/src/locales/vi.ts
@@ -0,0 +1,33 @@
+export default [
+ ['shortcuts_title', 'Shortcuts'],
+
+ ['data_viewer_shortcut_start_inline_editing', 'Mở Trình chỉnh sửa inline cho ô được chọn'],
+ ['data_viewer_shortcut_add_new_row', 'Thêm một hàng mới'],
+ ['data_viewer_shortcut_duplicate_row', 'Sao chép hàng'],
+ ['data_viewer_shortcut_delete_row', 'Xóa hàng'],
+ ['data_viewer_shortcut_revert_inline_editor_changes', 'Hoàn nguyên các thay đổi trong Trình chỉnh sửa inline'],
+ ['data_viewer_shortcut_past_value', 'Dán giá trị vào ô từ Clipboard'],
+ ['data_viewer_shortcut_copy_value', 'Sao chép giá trị ô vào Clipboard'],
+
+ ['sql_editor_shortcut_execute_statement', 'Thực thi câu lệnh SQL'],
+ ['sql_editor_shortcut_execute_statement_new_tab', 'Thực thi câu lệnh SQL trong tab mới'],
+ ['sql_editor_shortcut_execute_script', 'Thực thi kịch bản'],
+ ['sql_editor_shortcut_show_execution_plan', 'Hiển thị kế hoạch thực thi'],
+ ['sql_editor_shortcut_format', 'Định dạng kịch bản'],
+ ['sql_editor_shortcut_save_as_script', 'Lưu dưới dạng kịch bản'],
+ ['sql_editor_shortcut_open_editor_in_new_tab', 'Mở Trình chỉnh sửa SQL trong tab riêng biệt'],
+ ['sql_editor_shortcut_undo', 'Hoàn tác'],
+ ['sql_editor_shortcut_redo', 'Làm lại'],
+
+ ['navigation_tree_shortcut_enable_filter', 'Bật lọc'],
+
+ ['plugin_help_multi_tab_support_title', 'Không hỗ trợ nhiều tab'],
+ [
+ 'plugin_help_multi_tab_support_description',
+ `Dữ liệu không được kết nối với các tab khác.
+ Mọi tab ứng dụng đang mở sẽ không được lưu và có khả năng bị mất sau khi đóng tab.
+ Cài đặt ứng dụng cục bộ của bạn sẽ bị mất sau khi đóng tab.
+ Bạn có thể tải các tab và cài đặt cho tab này`,
+ ],
+ ['plugin_help_multi_tab_support_load_settings', 'Tải tab và cài đặt'],
+];
diff --git a/webapp/packages/plugin-log-viewer/src/LocaleService.ts b/webapp/packages/plugin-log-viewer/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-log-viewer/src/LocaleService.ts
+++ b/webapp/packages/plugin-log-viewer/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-log-viewer/src/locales/vi.ts b/webapp/packages/plugin-log-viewer/src/locales/vi.ts
new file mode 100644
index 0000000000..47054a1373
--- /dev/null
+++ b/webapp/packages/plugin-log-viewer/src/locales/vi.ts
@@ -0,0 +1,19 @@
+export default [
+ ['plugin_log_viewer_log_viewer_settings_group', 'Log viewer'],
+ ['plugin_log_viewer_action_enable_label', 'Log viewer'],
+ ['plugin_log_viewer_placeholder', 'Log viewer chưa được kích hoạt'],
+ ['plugin_log_viewer_clear_log', 'Xóa logs'],
+ ['plugin_log_viewer_entry_type', 'Loại'],
+ ['plugin_log_viewer_entry_timestamp', 'Thời gian'],
+ ['plugin_log_viewer_entry_message', 'Thông điệp'],
+ ['plugin_log_viewer_entry_details', 'Chi tiết'],
+ ['plugin_log_viewer_settings_disable', 'Tắt log viewer'],
+ ['plugin_log_viewer_settings_disable_description', 'Tắt khả năng xem logs cho tất cả người dùng'],
+ ['plugin_log_viewer_settings_max_log_records', 'Số lượng bản ghi logs tối đa'],
+ [
+ 'plugin_log_viewer_settings_max_log_records_description',
+ 'Số lượng bản ghi logs tối đa được lưu trữ trong logs viewer, các bản ghi cũ hơn sẽ bị xóa',
+ ],
+ ['plugin_log_viewer_settings_log_batch_size', 'Số lượng bản ghi logs cần tải'],
+ ['plugin_log_viewer_settings_log_batch_size_description', 'Số lượng bản ghi logs được tải trong một yêu cầu duy nhất'],
+];
diff --git a/webapp/packages/plugin-navigation-tree-filters/src/LocaleService.ts b/webapp/packages/plugin-navigation-tree-filters/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-navigation-tree-filters/src/LocaleService.ts
+++ b/webapp/packages/plugin-navigation-tree-filters/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-navigation-tree-filters/src/locales/vi.ts b/webapp/packages/plugin-navigation-tree-filters/src/locales/vi.ts
new file mode 100644
index 0000000000..07fc2580a6
--- /dev/null
+++ b/webapp/packages/plugin-navigation-tree-filters/src/locales/vi.ts
@@ -0,0 +1,11 @@
+export default [
+ ['plugin_navigation_tree_filters_title', 'Bộ lọc'],
+ ['plugin_navigation_tree_filters_info', 'Bạn có thể sử dụng mặt nạ (%, _ và *)'],
+ ['plugin_navigation_tree_filters_configuration', 'Cấu hình bộ lọc "{arg:name}"'],
+ ['plugin_navigation_tree_filters_reset', 'Đặt lại bộ lọc'],
+ ['plugin_navigation_tree_filters_filter', 'Lọc'],
+ ['plugin_navigation_tree_filters_include', 'Bao gồm'],
+ ['plugin_navigation_tree_filters_exclude', 'Loại trừ'],
+ ['plugin_navigation_tree_filters_submit_fail', 'Không thể áp dụng bộ lọc'],
+ ['plugin_navigation_tree_filters_reset_fail', 'Không thể đặt lại bộ lọc'],
+];
diff --git a/webapp/packages/plugin-navigation-tree-rm/src/LocaleService.ts b/webapp/packages/plugin-navigation-tree-rm/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-navigation-tree-rm/src/LocaleService.ts
+++ b/webapp/packages/plugin-navigation-tree-rm/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-navigation-tree-rm/src/locales/vi.ts b/webapp/packages/plugin-navigation-tree-rm/src/locales/vi.ts
new file mode 100644
index 0000000000..710ace916b
--- /dev/null
+++ b/webapp/packages/plugin-navigation-tree-rm/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['plugin_navigation_tree_rm_delete_confirmation_message', 'Bạn sắp xóa tài nguyên "{arg:name}". Bạn có chắc chắn không?']];
diff --git a/webapp/packages/plugin-navigation-tree/src/LocaleService.ts b/webapp/packages/plugin-navigation-tree/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-navigation-tree/src/LocaleService.ts
+++ b/webapp/packages/plugin-navigation-tree/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-navigation-tree/src/locales/vi.ts b/webapp/packages/plugin-navigation-tree/src/locales/vi.ts
new file mode 100644
index 0000000000..6e36667caa
--- /dev/null
+++ b/webapp/packages/plugin-navigation-tree/src/locales/vi.ts
@@ -0,0 +1,41 @@
+export default [
+ ['plugin_navigation_tree_explorer_tab_title', 'Explorer'],
+ ['app_navigationTree_openNodeTab', 'Mở'],
+ ['app_navigationTree_search', 'Tìm kiếm phần tử...'],
+ ['app_navigationTree_limited', 'Phần tử bị giới hạn ở {arg:limit} mục'],
+ ['app_navigationTree_action_collapse_all', 'Thu gọn tất cả'],
+ ['app_navigationTree_settings_filter_objects_description', 'Hiển thị mô tả đối tượng'],
+ ['app_navigationTree_settings_filter_title', 'Lọc'],
+ ['app_navigationTree_settings_filter_description', 'Hiển thị trường lọc'],
+ ['app_navigationTree_settings_filter_all_title', 'Hiển thị đã thu gọn'],
+ ['app_navigationTree_settings_filter_all_description', 'Hiển thị các phần tử được lọc trong các thư mục đã thu gọn'],
+ ['app_navigationTree_settings_state_title', 'Lưu trạng thái cây'],
+ ['app_navigationTree_settings_state_description', 'Mở lại các nút đã mở rộng sau khi làm mới trang'],
+ ['app_navigationTree_settings_folders_title', 'Thư mục'],
+ ['app_navigationTree_settings_folders_description', 'Mở bất kỳ nút nào làm nút gốc của cây'],
+ ['app_navigationTree_node_delete_confirmation', 'Bạn sắp xóa "{arg:name}". Bạn có chắc chắn không?'],
+ ['app_navigationTree_node_folder_delete_confirmation', 'Tất cả nội dung trong thư mục đã chọn sẽ bị xóa.'],
+ ['app_navigationTree_node_delete_error', 'Không thể xóa "{arg:name}"'],
+ ['app_navigationTree_node_rename_error', 'Đã xảy ra lỗi khi đổi tên'],
+ ['app_navigationTree_node_empty', 'Trống'],
+ ['app_navigationTree_node_no_results', 'Xin lỗi. Không có kết quả phù hợp cho "{arg:filter}"'],
+ ['app_navigationTree_node_not_found', 'Không tìm thấy nút'],
+ ['app_navigationTree_connection_view', 'Chế độ xem kết nối'],
+ ['app_navigationTree_connection_view_option_simple', 'Đơn giản'],
+ ['app_navigationTree_connection_view_option_advanced', 'Nâng cao'],
+ ['app_navigationTree_connection_view_option_custom', 'Tùy chỉnh'],
+ ['app_navigationTree_connection_view_option_showSystemObjects', 'Hiển thị đối tượng hệ thống'],
+ ['app_navigationTree_refresh', 'Làm mới'],
+ ['app_navigationTree_refresh_error', 'Không thể làm mới nút'],
+ ['app_navigationTree_node_change_name_error', 'Đã xảy ra lỗi khi thay đổi tên'],
+ ['app_navigationTree_context_disconnect', 'Ngắt kết nối'],
+ ['app_navigationTree_context_change_credentials', 'Thay đổi Thông tin xác thực'],
+ ['app_navigationTree_connection_group_user', 'Kết nối Người dùng'],
+ ['app_navigationTree_connection_group_shared', 'Kết nối Chia sẻ'],
+ ['app_navigationTree_empty_placeholder', 'Không có Kết nối.\nSử dụng menu trên cùng để thiết lập kết nối đến cơ sở dữ liệu của bạn.'],
+ ['app_navigationTree_drop_here', 'Thả tại đây...'],
+ ['plugin_navigation_tree_settings_projects_description', 'Hiển thị các phần tử theo nhóm dự án'],
+ ['plugin_navigation_tree_settings_projects_title', 'Nhóm theo Dự án'],
+ ['plugin_navigation_tree_settings_disable', 'Tắt'],
+ ['plugin_navigation_tree_settings_disable_description', 'Tắt cây điều hướng cho tất cả người dùng'],
+];
diff --git a/webapp/packages/plugin-object-viewer-nav-tree-link/src/LocaleService.ts b/webapp/packages/plugin-object-viewer-nav-tree-link/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-object-viewer-nav-tree-link/src/LocaleService.ts
+++ b/webapp/packages/plugin-object-viewer-nav-tree-link/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-object-viewer-nav-tree-link/src/locales/vi.ts b/webapp/packages/plugin-object-viewer-nav-tree-link/src/locales/vi.ts
new file mode 100644
index 0000000000..2a9493c4b2
--- /dev/null
+++ b/webapp/packages/plugin-object-viewer-nav-tree-link/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['app_navigationTree_action_link_with_editor', 'Liên kết với trình chỉnh sửa']];
diff --git a/webapp/packages/plugin-object-viewer/src/LocaleService.ts b/webapp/packages/plugin-object-viewer/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-object-viewer/src/LocaleService.ts
+++ b/webapp/packages/plugin-object-viewer/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-object-viewer/src/locales/vi.ts b/webapp/packages/plugin-object-viewer/src/locales/vi.ts
new file mode 100644
index 0000000000..6a79d8b50e
--- /dev/null
+++ b/webapp/packages/plugin-object-viewer/src/locales/vi.ts
@@ -0,0 +1,8 @@
+export default [
+ ['plugin_object_viewer_properties_tab', 'Thuộc Tính'],
+ ['plugin_object_viewer_object_info_tab', 'Thông Tin'],
+ ['plugin_object_viewer_table_name', 'Tên'],
+ ['plugin_object_viewer_table_no_items', 'Không có mục nào để hiển thị'],
+ ['plugin_object_viewer_error', 'Đã xảy ra lỗi khi tải tab'],
+ ['plugin_object_viewer_delete_object_fail', 'Không thể xóa đối tượng'],
+];
diff --git a/webapp/packages/plugin-product-information-administration/src/LocaleService.ts b/webapp/packages/plugin-product-information-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-product-information-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-product-information-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-product-information-administration/src/locales/vi.ts b/webapp/packages/plugin-product-information-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..e390cdb70c
--- /dev/null
+++ b/webapp/packages/plugin-product-information-administration/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['administration_settings_menu_title', 'Thông tin sản phẩm']];
diff --git a/webapp/packages/plugin-product/src/LocaleService.ts b/webapp/packages/plugin-product/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-product/src/LocaleService.ts
+++ b/webapp/packages/plugin-product/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-product/src/locales/vi.ts b/webapp/packages/plugin-product/src/locales/vi.ts
new file mode 100644
index 0000000000..6851f303dc
--- /dev/null
+++ b/webapp/packages/plugin-product/src/locales/vi.ts
@@ -0,0 +1,7 @@
+export default [
+ ['app_product_info', 'Giới thiệu'],
+ ['app_product_info_name', 'Tên sản phẩm'],
+ ['app_product_info_description', 'Mô tả sản phẩm'],
+ ['app_product_info_contacts', 'Liên hệ'],
+ ['app_product_info_placeholder', 'Không có thông tin để hiển thị'],
+];
diff --git a/webapp/packages/plugin-projects/src/LocaleService.ts b/webapp/packages/plugin-projects/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-projects/src/LocaleService.ts
+++ b/webapp/packages/plugin-projects/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-projects/src/locales/vi.ts b/webapp/packages/plugin-projects/src/locales/vi.ts
new file mode 100644
index 0000000000..31ac65f3b6
--- /dev/null
+++ b/webapp/packages/plugin-projects/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['plugin_projects_project_select_label', 'Dự án']];
diff --git a/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts b/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-resource-manager-administration/src/locales/vi.ts b/webapp/packages/plugin-resource-manager-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..fffe9018a7
--- /dev/null
+++ b/webapp/packages/plugin-resource-manager-administration/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['plugin_resource_manager_administration_settings_enable', 'Bật {alias:plugin_resource_manager_title}'],
+ ['plugin_resource_manager_administration_settings_enable_description', 'Kích hoạt chức năng {alias:plugin_resource_manager_title}'],
+];
diff --git a/webapp/packages/plugin-resource-manager-scripts/src/LocaleService.ts b/webapp/packages/plugin-resource-manager-scripts/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-resource-manager-scripts/src/LocaleService.ts
+++ b/webapp/packages/plugin-resource-manager-scripts/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-resource-manager-scripts/src/locales/vi.ts b/webapp/packages/plugin-resource-manager-scripts/src/locales/vi.ts
new file mode 100644
index 0000000000..b4817f3b61
--- /dev/null
+++ b/webapp/packages/plugin-resource-manager-scripts/src/locales/vi.ts
@@ -0,0 +1,13 @@
+export default [
+ ['plugin_resource_manager_scripts_action_enable_label', 'Hiển thị scripts'],
+ ['plugin_resource_manager_scripts_title', 'Scripts'],
+ ['plugin_resource_manager_scripts_no_resources_placeholder', 'Chưa có scripts nào'],
+ ['plugin_resource_manager_scripts_save_script', 'Lưu scripts'],
+ [
+ 'plugin_resource_manager_scripts_script_name_invalid_characters_message',
+ 'Tên scripts không được chứa các ký tự sau / : " \\ \' <> | ? * và không được bắt đầu bằng dấu chấm',
+ ],
+ ['plugin_resource_manager_scripts_save_script_project_restriction_descripion', 'Dự án của scripts không được khác với dự án của kết nối'],
+ ['plugin_resource_manager_scripts_disable', 'Tắt tập lệnh'],
+ ['plugin_resource_manager_scripts_disable_description', 'Tắt trình khám phá scripts cho tất cả người dùng'],
+];
diff --git a/webapp/packages/plugin-resource-manager/src/LocaleService.ts b/webapp/packages/plugin-resource-manager/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-resource-manager/src/LocaleService.ts
+++ b/webapp/packages/plugin-resource-manager/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-resource-manager/src/locales/vi.ts b/webapp/packages/plugin-resource-manager/src/locales/vi.ts
new file mode 100644
index 0000000000..b9ead2f69e
--- /dev/null
+++ b/webapp/packages/plugin-resource-manager/src/locales/vi.ts
@@ -0,0 +1,4 @@
+export default [
+ ['plugin_resource_manager_title', 'Quản lý Tài nguyên'],
+ ['plugin_resource_manager_folder_move_failed', 'Không thể chuyển đến thư mục'],
+];
diff --git a/webapp/packages/plugin-root/src/LocaleService.ts b/webapp/packages/plugin-root/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-root/src/LocaleService.ts
+++ b/webapp/packages/plugin-root/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-root/src/locales/vi.ts b/webapp/packages/plugin-root/src/locales/vi.ts
new file mode 100644
index 0000000000..ae2d198cb2
--- /dev/null
+++ b/webapp/packages/plugin-root/src/locales/vi.ts
@@ -0,0 +1,6 @@
+export default [
+ ['plugin_root_network_state_title', 'Chế độ ngoại tuyến'],
+ ['plugin_root_network_state_description', 'Ứng dụng hiện đang ở chế độ ngoại tuyến, một số tính năng bị tắt'],
+ ['plugin_root_data_sync_title', 'Đồng bộ dữ liệu'],
+ ['plugin_root_data_sync_message', 'Bạn có các cập nhật dữ liệu, bạn có muốn áp dụng chúng không? Một số dữ liệu có thể bị mất.'],
+];
diff --git a/webapp/packages/plugin-session-expiration/src/LocaleService.ts b/webapp/packages/plugin-session-expiration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-session-expiration/src/LocaleService.ts
+++ b/webapp/packages/plugin-session-expiration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-session-expiration/src/locales/vi.ts b/webapp/packages/plugin-session-expiration/src/locales/vi.ts
new file mode 100644
index 0000000000..d6d1738de6
--- /dev/null
+++ b/webapp/packages/plugin-session-expiration/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/webapp/packages/plugin-settings-administration/src/LocaleService.ts b/webapp/packages/plugin-settings-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-settings-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-settings-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-settings-administration/src/locales/vi.ts b/webapp/packages/plugin-settings-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..53bcf8eb67
--- /dev/null
+++ b/webapp/packages/plugin-settings-administration/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['plugin_settings_administration_settings_save_success', 'Tùy chọn đã được lưu thành công'],
+ ['plugin_settings_administration_settings_save_fail', 'Lưu tùy chọn thất bại'],
+ ['plugin_settings_administration_drawer_item_title', 'Tùy chọn Toàn cục'],
+];
diff --git a/webapp/packages/plugin-settings-panel/src/LocaleService.ts b/webapp/packages/plugin-settings-panel/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-settings-panel/src/LocaleService.ts
+++ b/webapp/packages/plugin-settings-panel/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-settings-panel/src/locales/vi.ts b/webapp/packages/plugin-settings-panel/src/locales/vi.ts
new file mode 100644
index 0000000000..67b8116746
--- /dev/null
+++ b/webapp/packages/plugin-settings-panel/src/locales/vi.ts
@@ -0,0 +1,6 @@
+export default [
+ ['plugin_settings_panel_empty', 'Không có cài đặt nào'],
+ ['plugin_settings_panel_search', 'Tìm kiếm cài đặt...'],
+ ['plugin_settings_panel_no_settings', 'Không tìm thấy cài đặt nào'],
+ ['plugin_settings_panel_group_empty', 'Không có cài đặt nào'],
+];
diff --git a/webapp/packages/plugin-sql-editor-navigation-tab-script/src/LocaleService.ts b/webapp/packages/plugin-sql-editor-navigation-tab-script/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-editor-navigation-tab-script/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-editor-navigation-tab-script/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-editor-navigation-tab-script/src/locales/vi.ts b/webapp/packages/plugin-sql-editor-navigation-tab-script/src/locales/vi.ts
new file mode 100644
index 0000000000..2559ab6575
--- /dev/null
+++ b/webapp/packages/plugin-sql-editor-navigation-tab-script/src/locales/vi.ts
@@ -0,0 +1,16 @@
+export default [
+ ['plugin_sql_editor_navigation_tab_resource_save_script_title', 'Lưu dưới dạng script (Shift + Ctrl + S)'],
+ ['plugin_sql_editor_navigation_tab_script_state_renaming', 'Đang đổi tên script...'],
+ ['plugin_sql_editor_navigation_tab_script_state_reading', 'Đang đọc script...'],
+ ['plugin_sql_editor_navigation_tab_script_state_saving', 'Đang lưu script...'],
+ ['plugin_sql_editor_navigation_tab_script_state_updating', 'Đang cập nhật thông tin script...'],
+ ['plugin_sql_editor_navigation_tab_script_state_different_project', 'Dự án kết nối khác với dự án script—thay đổi kết nối không được lưu.'],
+ ['plugin_sql_editor_navigation_tab_script_state_readonly', 'Đây là script chỉ đọc. Mọi thay đổi sẽ không được lưu.'],
+ ['plugin_sql_editor_navigation_tab_resource_save_script_success', 'Script đã được lưu thành công'],
+ ['plugin_sql_editor_navigation_tab_resource_open_script_error', 'Không thể mở script'],
+ ['plugin_sql_editor_navigation_tab_resource_save_script_error', 'Đã xảy ra lỗi khi cố gắng lưu script'],
+ ['plugin_sql_editor_navigation_tab_resource_update_script_error', 'Không thể cập nhật script'],
+ ['plugin_sql_editor_navigation_tab_resource_sync_script_error', 'Không thể đồng bộ truy vấn của trình soạn thảo'],
+ ['plugin_sql_editor_navigation_tab_resource_save_script_error_confirmation_title', 'Không thể lưu script'],
+ ['plugin_sql_editor_navigation_tab_resource_save_script_error_confirmation_message', 'Đã xảy ra lỗi khi cố gắng lưu script. Đóng tab?'],
+];
diff --git a/webapp/packages/plugin-sql-editor-navigation-tab/src/LocaleService.ts b/webapp/packages/plugin-sql-editor-navigation-tab/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-editor-navigation-tab/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-editor-navigation-tab/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-editor-navigation-tab/src/locales/vi.ts b/webapp/packages/plugin-sql-editor-navigation-tab/src/locales/vi.ts
new file mode 100644
index 0000000000..d07b03ffbc
--- /dev/null
+++ b/webapp/packages/plugin-sql-editor-navigation-tab/src/locales/vi.ts
@@ -0,0 +1,7 @@
+export default [
+ ['plugin_sql_editor_navigation_tab_action_sql_editor_new', 'SQL'],
+ ['plugin_sql_editor_navigation_tab_action_sql_editor_new_tooltip', 'Mở Trình Soạn Thảo SQL'],
+ ['plugin_sql_editor_navigation_tab_action_sql_editor_new_tooltip_context', 'Mở Trình Soạn Thảo SQL cho {arg:connection}'],
+ ['plugin_sql_editor_navigation_tab_data_source_save_confirmation_title', 'Lưu thay đổi'],
+ ['plugin_sql_editor_navigation_tab_data_source_save_confirmation_message', 'Bạn có muốn lưu thay đổi không?'],
+];
diff --git a/webapp/packages/plugin-sql-editor-new/src/LocaleService.ts b/webapp/packages/plugin-sql-editor-new/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-editor-new/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-editor-new/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-editor-new/src/locales/vi.ts b/webapp/packages/plugin-sql-editor-new/src/locales/vi.ts
new file mode 100644
index 0000000000..a992adf767
--- /dev/null
+++ b/webapp/packages/plugin-sql-editor-new/src/locales/vi.ts
@@ -0,0 +1,6 @@
+export default [
+ ['plugin_sql_editor_new_merge_conflict_keep_current_label', 'Giữ Hiện tại'],
+ ['plugin_sql_editor_new_merge_conflict_keep_current_tooltip', 'Giữ các thay đổi Hiện tại'],
+ ['plugin_sql_editor_new_merge_conflict_accept_incoming_label', 'Chấp nhận Thay đổi Mới'],
+ ['plugin_sql_editor_new_merge_conflict_accept_incoming_tooltip', 'Chấp nhận các Thay đổi Mới'],
+];
diff --git a/webapp/packages/plugin-sql-editor-screen/src/LocaleService.ts b/webapp/packages/plugin-sql-editor-screen/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-editor-screen/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-editor-screen/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-editor-screen/src/locales/vi.ts b/webapp/packages/plugin-sql-editor-screen/src/locales/vi.ts
new file mode 100644
index 0000000000..ab76ff5afd
--- /dev/null
+++ b/webapp/packages/plugin-sql-editor-screen/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['sql_editor_screen_no_context_title', 'Lỗi khi mở trong tab mới'],
+ ['sql_editor_screen_no_context_message', 'Vui lòng chọn kết nối cho trình soạn thảo SQL hiện tại'],
+ ['sql_editor_screen_context_not_found', 'Không tìm thấy ngữ cảnh'],
+];
diff --git a/webapp/packages/plugin-sql-editor/src/LocaleService.ts b/webapp/packages/plugin-sql-editor/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-editor/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-editor/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-editor/src/locales/vi.ts b/webapp/packages/plugin-sql-editor/src/locales/vi.ts
new file mode 100644
index 0000000000..0c1a0db8cb
--- /dev/null
+++ b/webapp/packages/plugin-sql-editor/src/locales/vi.ts
@@ -0,0 +1,48 @@
+export default [
+ ['plugin_sql_editor_sql_editor_settings_group', 'Trình Soạn Thảo SQL'],
+ ['sql_editor_settings_insert_table_aliases_name', 'Chèn bí danh bảng (trong mệnh đề FROM)'],
+ ['sql_editor_settings_insert_table_aliases_desc', 'Tự động chèn bí danh bảng'],
+ ['sql_editor_menu', 'Trình Soạn Thảo SQL'],
+ ['sql_editor_script_editor', 'Trình Soạn Thảo SQL'],
+ ['sql_editor_alias_loading_error', 'Đã xảy ra lỗi khi tải bí danh nút'],
+ ['sql_editor_restore_message', 'Bạn có muốn khôi phục kết nối không?'],
+ ['sql_editor_restore', 'Khôi phục'],
+ ['sql_editor_placeholder', 'Thực thi truy vấn với Ctrl+Enter để xem kết quả'],
+ ['sql_editor_hint_empty', 'Không có đề xuất nào...'],
+ ['sql_editor_execution_plan_button_tooltip', 'Giải thích kế hoạch thực thi (Shift + Ctrl + E)'],
+ ['sql_editor_output_logs_button_tooltip', 'Hiển thị đầu ra máy chủ (Shift + Ctrl + O)'],
+ ['sql_editor_output_logs_tab_title', 'Đầu ra'],
+ ['sql_editor_output_logs_input_placeholder', 'Nhập một phần của tin nhắn để tìm kiếm tại đây'],
+ ['sql_editor_output_logs_wrap_mode', 'Chế độ wrap'],
+ ['sql_editor_sql_execution_button_tooltip', 'Thực thi câu lệnh SQL (Ctrl + Enter)'],
+ ['sql_editor_sql_execution_new_tab_button_tooltip', 'Thực thi câu lệnh SQL trong tab mới (Ctrl + \\)(Shift + Ctrl + Enter)'],
+ ['sql_editor_sql_execution_script_button_tooltip', 'Thực thi kịch bản SQL (Alt + X)'],
+ ['sql_editor_sql_format_button_tooltip', 'Định dạng kịch bản SQL (Shift + Ctrl + F)'],
+ ['sql_editor_sql_execution_script_lock_tooltip', 'Khóa trình soạn thảo để ngăn sửa đổi'],
+ ['sql_editor_sql_statistics_unavailable', 'Thống kê không khả dụng'],
+ ['sql_editor_sql_execution_executed_queries', 'Các truy vấn đã thực thi:'],
+ ['sql_editor_sql_execution_executing', 'Đang thực thi...'],
+ ['sql_execution_plan_placeholder', 'Kế hoạch thực thi trống'],
+ ['sql_execution_plan_properties_panel_placeholder', 'Không có mục nào để hiển thị'],
+ ['sql_execution_plan_properties_panel_name', 'Tên'],
+ ['sql_execution_plan_properties_panel_value', 'Giá trị'],
+ ['sql_execution_plan_properties_panel_general', 'Chung'],
+ ['sql_execution_plan_properties_panel_details', 'Chi tiết'],
+ ['sql_editor_upload_script_tooltip', 'Tải lên kịch bản SQL'],
+ ['sql_editor_download_script_tooltip', 'Tải xuống kịch bản SQL'],
+ [
+ 'sql_editor_upload_script_unsaved_changes_dialog_message',
+ 'Kịch bản hiện tại của bạn sẽ bị ghi đè bởi kịch bản đã tải lên. Bạn có muốn lưu nó trước không?',
+ ],
+ ['sql_editor_upload_script_max_size_title', 'Kích thước tệp vượt quá kích thước tối đa'],
+ ['sql_editor_close_result_tabs_dialog_title', 'Xác nhận đóng các tab'],
+ ['plugin_sql_editor_action_overlay_title', 'Yêu cầu hành động'],
+ ['plugin_sql_editor_action_overlay_description', 'Vui lòng mở lại trình soạn thảo để tiếp tục làm việc.'],
+ ['plugin_sql_editor_action_close_group', 'Đóng tất cả các truy vấn cùng loại'],
+ ['plugin_sql_editor_settings_disable', 'Vô hiệu hóa'],
+ ['plugin_sql_editor_settings_disable_description', 'Vô hiệu hóa trình soạn thảo SQL cho tất cả người dùng'],
+ ['plugin_sql_editor_settings_import_max_size', 'Giới hạn nhập (KB)'],
+ ['plugin_sql_editor_settings_import_max_size_description', 'Kích thước tệp tối đa có thể nhập vào tính bằng KB'],
+ ['plugin_sql_editor_settings_auto_save', 'Tự động lưu'],
+ ['plugin_sql_editor_settings_auto_save_description', 'Tự động lưu nội dung trình soạn thảo'],
+];
diff --git a/webapp/packages/plugin-sql-generator/src/LocaleService.ts b/webapp/packages/plugin-sql-generator/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-sql-generator/src/LocaleService.ts
+++ b/webapp/packages/plugin-sql-generator/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-sql-generator/src/locales/vi.ts b/webapp/packages/plugin-sql-generator/src/locales/vi.ts
new file mode 100644
index 0000000000..d6d1738de6
--- /dev/null
+++ b/webapp/packages/plugin-sql-generator/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/webapp/packages/plugin-system-information-administration/src/LocaleService.ts b/webapp/packages/plugin-system-information-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-system-information-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-system-information-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-system-information-administration/src/locales/vi.ts b/webapp/packages/plugin-system-information-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..4c73d1346f
--- /dev/null
+++ b/webapp/packages/plugin-system-information-administration/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['plugin_system_information_administration_tab_title', 'Thông tin hệ thống']];
diff --git a/webapp/packages/plugin-task-manager/src/LocaleService.ts b/webapp/packages/plugin-task-manager/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-task-manager/src/LocaleService.ts
+++ b/webapp/packages/plugin-task-manager/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-task-manager/src/locales/vi.ts b/webapp/packages/plugin-task-manager/src/locales/vi.ts
new file mode 100644
index 0000000000..5f9e87217b
--- /dev/null
+++ b/webapp/packages/plugin-task-manager/src/locales/vi.ts
@@ -0,0 +1 @@
+export default [['plugin_task_manager_notification_title', 'Đang xử lý...']];
diff --git a/webapp/packages/plugin-tools-panel/src/LocaleService.ts b/webapp/packages/plugin-tools-panel/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-tools-panel/src/LocaleService.ts
+++ b/webapp/packages/plugin-tools-panel/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-tools-panel/src/locales/vi.ts b/webapp/packages/plugin-tools-panel/src/locales/vi.ts
new file mode 100644
index 0000000000..d136a2fd5e
--- /dev/null
+++ b/webapp/packages/plugin-tools-panel/src/locales/vi.ts
@@ -0,0 +1,6 @@
+export default [
+ ['plugin_tools_panel_tools_settings_group', 'Công Cụ'],
+ ['plugin_tools_panel_settings_disable_label', 'Vô Hiệu Hóa Công Cụ'],
+ ['plugin_tools_panel_settings_disable_description', 'Vô hiệu hóa menu Công Cụ từ thanh menu trên cùng'],
+ ['plugin_tools_panel_menu_title', 'Công Cụ'],
+];
diff --git a/webapp/packages/plugin-user-profile-settings/src/LocaleService.ts b/webapp/packages/plugin-user-profile-settings/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-user-profile-settings/src/LocaleService.ts
+++ b/webapp/packages/plugin-user-profile-settings/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-user-profile-settings/src/locales/vi.ts b/webapp/packages/plugin-user-profile-settings/src/locales/vi.ts
new file mode 100644
index 0000000000..5eb211520b
--- /dev/null
+++ b/webapp/packages/plugin-user-profile-settings/src/locales/vi.ts
@@ -0,0 +1,7 @@
+export default [
+ ['plugin_user_profile_settings_tab_label', 'Tùy Chọn'],
+ ['plugin_user_profile_settings_action_description', 'Tùy chọn người dùng'],
+ ['plugin_user_profile_settings_save_success', 'Lưu tùy chọn thành công'],
+ ['plugin_user_profile_settings_save_fail', 'Không thể lưu tùy chọn'],
+ ['plugin_user_profile_settings_restore_defaults', 'Khôi phục mặc định'],
+];
diff --git a/webapp/packages/plugin-user-profile/src/LocaleService.ts b/webapp/packages/plugin-user-profile/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-user-profile/src/LocaleService.ts
+++ b/webapp/packages/plugin-user-profile/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-user-profile/src/locales/vi.ts b/webapp/packages/plugin-user-profile/src/locales/vi.ts
new file mode 100644
index 0000000000..7520db6967
--- /dev/null
+++ b/webapp/packages/plugin-user-profile/src/locales/vi.ts
@@ -0,0 +1,25 @@
+export default [
+ ['plugin_user_profile_account_title', 'Tài Khoản'],
+ ['plugin_user_profile_menu', 'Hồ Sơ'],
+ ['plugin_user_profile_info', 'Thông Tin'],
+ ['plugin_user_profile_info_id', 'Mã Người Dùng'],
+ ['plugin_user_profile_info_displayName', 'Tên Hiển Thị'],
+ ['plugin_user_profile_auth_providers', 'Nhà Cung Cấp Xác Thực'],
+ ['plugin_user_profile_info', 'Thông Tin Người Dùng'],
+ ['plugin_user_profile_auth_tokens', 'Mã Xác Thực'],
+ ['plugin_user_profile_auth_providers_active', 'Xác thực đang hoạt động'],
+
+ ['plugin_user_profile_authentication_change_password', 'Đổi mật khẩu'],
+ ['plugin_user_profile_authentication_change_password_current_password', 'Mật khẩu hiện tại'],
+ ['plugin_user_profile_authentication_change_password_new_password', 'Mật khẩu mới'],
+ ['plugin_user_profile_authentication_change_password_repeat_password', 'Nhập lại mật khẩu'],
+ ['plugin_user_profile_authentication_change_password_success', 'Mật khẩu đã được thay đổi thành công'],
+ ['plugin_user_profile_authentication_change_password_submit_label', 'Đổi'],
+ ['plugin_user_profile_authentication_change_password_passwords_not_match', 'Mật khẩu không khớp'],
+ ['plugin_user_profile_authentication_change_password_password_validation_error', 'Xác thực mật khẩu thất bại'],
+ ['plugin_user_profile_authentication_change_password_cancel_title', 'Hủy đổi mật khẩu'],
+ [
+ 'plugin_user_profile_authentication_change_password_cancel_message',
+ 'Bạn đang hủy thay đổi mật khẩu. Các thay đổi chưa lưu sẽ bị mất. Bạn có chắc chắn không?',
+ ],
+];
diff --git a/webapp/packages/plugin-version-update-administration/src/LocaleService.ts b/webapp/packages/plugin-version-update-administration/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/plugin-version-update-administration/src/LocaleService.ts
+++ b/webapp/packages/plugin-version-update-administration/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/plugin-version-update-administration/src/locales/vi.ts b/webapp/packages/plugin-version-update-administration/src/locales/vi.ts
new file mode 100644
index 0000000000..8953b45833
--- /dev/null
+++ b/webapp/packages/plugin-version-update-administration/src/locales/vi.ts
@@ -0,0 +1,9 @@
+export default [
+ ['plugin_version_update_administration_version_selector_label', 'Phiên Bản'],
+ ['plugin_version_update_administration_recommendations_label', 'Khuyến Nghị'],
+ [
+ 'plugin_version_update_administration_recommendations',
+ 'Chúng tôi khuyến nghị không hạ cấp sản phẩm. Chúng tôi không thể đảm bảo ứng dụng sẽ hoạt động đúng sau khi thực hiện quy trình này.',
+ ],
+ ['plugin_version_update_administration_tab_title', 'Cập Nhật Phiên Bản'],
+];
diff --git a/webapp/packages/product-default-impl/src/LocaleService.ts b/webapp/packages/product-default-impl/src/LocaleService.ts
index a55cfec20e..2c0a05d735 100644
--- a/webapp/packages/product-default-impl/src/LocaleService.ts
+++ b/webapp/packages/product-default-impl/src/LocaleService.ts
@@ -28,6 +28,8 @@ export class LocaleService extends Bootstrap {
return (await import('./locales/zh.js')).default;
case 'fr':
return (await import('./locales/fr.js')).default;
+ case 'vi':
+ return (await import('./locales/vi.js')).default;
default:
return (await import('./locales/en.js')).default;
}
diff --git a/webapp/packages/product-default-impl/src/locales/vi.ts b/webapp/packages/product-default-impl/src/locales/vi.ts
new file mode 100644
index 0000000000..68b49decc7
--- /dev/null
+++ b/webapp/packages/product-default-impl/src/locales/vi.ts
@@ -0,0 +1,5 @@
+export default [
+ ['product_name', 'CE'],
+ ['product_full_name', 'CloudBeaver Cộng Đồng'],
+ ['product_license_prefix', '-- CloudBeaver {alias:product_name}'],
+];