diff --git a/CHANGES b/CHANGES index 55f0dddb1..f2e21ef34 100644 --- a/CHANGES +++ b/CHANGES @@ -2702,4 +2702,5 @@ * Cleanup backup validation mount point * dashboard: remove nginx config of old domain when domain changed * Show disk consumption of docker volumes for /run and /tmp of apps separately +* dns: add dnsimple automation diff --git a/dashboard/src/js/setupdns.js b/dashboard/src/js/setupdns.js index 995993175..2ecf91b8c 100644 --- a/dashboard/src/js/setupdns.js +++ b/dashboard/src/js/setupdns.js @@ -82,6 +82,7 @@ app.controller('SetupDNSController', ['$scope', '$http', '$timeout', 'Client', f { name: 'Bunny', value: 'bunny' }, { name: 'Cloudflare', value: 'cloudflare' }, { name: 'DigitalOcean', value: 'digitalocean' }, + { name: 'dnsimple', value: 'dnsimple' }, { name: 'Gandi LiveDNS', value: 'gandi' }, { name: 'GoDaddy', value: 'godaddy' }, { name: 'Google Cloud DNS', value: 'gcdns' }, @@ -112,6 +113,7 @@ app.controller('SetupDNSController', ['$scope', '$http', '$timeout', 'Client', f godaddyApiSecret: '', linodeToken: '', bunnyAccessKey: '', + dnsimpleAccessToken: '', hetznerToken: '', vultrToken: '', nameComUsername: '', @@ -204,6 +206,8 @@ app.controller('SetupDNSController', ['$scope', '$http', '$timeout', 'Client', f config.token = $scope.dnsCredentials.linodeToken; } else if (provider === 'bunny') { config.token = $scope.dnsCredentials.bunnyAccessKey; + } else if (provider === 'dnsimple') { + config.token = $scope.dnsCredentials.dnsimpleAccessToken; } else if (provider === 'hetzner') { config.token = $scope.dnsCredentials.hetznerToken; } else if (provider === 'vultr') { diff --git a/dashboard/src/setupdns.html b/dashboard/src/setupdns.html index faedfff38..dfe7c94b4 100644 --- a/dashboard/src/setupdns.html +++ b/dashboard/src/setupdns.html @@ -226,6 +226,12 @@
+ ++ + +
+my del dominio seleccionado.",
+ "description": "Esto moverá el panel al subdominio my del dominio seleccionado.",
"showLogsAction": "Mostrar Registros",
"cancelAction": "Cancelar",
"changeAction": "Cambiar Dominio",
@@ -1047,7 +1064,8 @@
"dataDirPlaceholder": "Dejar vacío para usar la plataforma predeterminada",
"description": "Si el servidor se está quedando sin espacio en disco, usa esto para mover los datos de la aplicación a un volumen. Cualquier dato aquí es parte de la copia de seguridad de la aplicación.",
"moveAction": "Mover datos",
- "diskUsage": "Actualmente, la aplicación está usando {{ size }} de almacenamiento (hasta el {{ date }})."
+ "diskUsage": "Actualmente, la aplicación está usando {{ size }} de almacenamiento (hasta el {{ date }}).",
+ "mountTypeWarning": "El sistema de archivos de destino debe admitir permisos y propiedad de los archivos para que el traslado funcione"
}
},
"logsActionTooltip": "Registros",
@@ -1321,6 +1339,17 @@
"label": "Etiqueta",
"clearIconAction": "Borrar icono",
"clearIconDescription": "Esto intentará obtener el favicon de la aplicación al guardar."
+ },
+ "servicesTabTitle": "Servicios",
+ "turn": {
+ "title": "Configuración de TURN",
+ "enable": "Configura la aplicación para utilizar el servidor TURN integrado",
+ "disable": "No configures los ajustes de la aplicación TURN. Su configuración se deja como está. Puedes hacer los ajustes dentro de la aplicación."
+ },
+ "redis": {
+ "title": "Configuración de Redis",
+ "enable": "Configura la aplicación para usar Redis",
+ "disable": "Deshabilitar Redis"
}
},
"lang": {
@@ -1389,7 +1418,8 @@
"sshCheckbox": "Permitir que los ingenieros de soporte se conecten a este servidor a través de SSH",
"emailPlaceholder": "Si es necesario, proporciona una dirección de correo electrónico diferente de la anterior para contactarte",
"emailVerifyAction": "Verificar ahora",
- "emailNotVerified": "El correo electrónico de su cuenta cloudron.io {{email}} no está verificado. Verifíquelo para abrir tickets de soporte."
+ "emailNotVerified": "El correo electrónico de su cuenta cloudron.io {{email}} no está verificado. Verifíquelo para abrir tickets de soporte.",
+ "typeBilling": "Problema de facturación"
},
"title": "Soporte"
},
@@ -1428,7 +1458,11 @@
"title": "Actualizar Volumen {{ volume }}"
},
"tooltipEdit": "Editar Volumen",
- "remountActionTooltip": "Volver a montar Volumen"
+ "remountActionTooltip": "Volver a montar Volumen",
+ "editVolumeDialog": {
+ "title": "Editar volumen {{ name }}"
+ },
+ "editActionTooltip": "Editar Volumen"
},
"eventlog": {
"filterAllEvents": "Todos los Eventos",
@@ -1507,7 +1541,8 @@
"copy": "Copiar",
"paste": "Pegar",
"selectAll": "Seleccionar todo",
- "download": "Descargar"
+ "download": "Descargar",
+ "open": "Abrir"
},
"mtime": "Modificado"
},
@@ -1522,12 +1557,26 @@
},
"extract": {
"error": "La extracción falló: {{ message }}"
- }
+ },
+ "extractionInProgress": "Extracción en progreso",
+ "uploader": {
+ "exitWarning": "Subida en progreso... ¿quieres realmente cerrar esta página?",
+ "uploading": "Subiendo"
+ },
+ "textEditor": {
+ "undo": "Deshacer",
+ "redo": "Rehacer",
+ "save": "Guardar"
+ },
+ "pasteInProgress": "Pegado en progreso",
+ "deleteInProgress": "Borrado en progreso"
},
"logs": {
"download": "Descarga los Registros Completos",
"clear": "Borrar Vista",
- "title": "Registros"
+ "title": "Registros",
+ "notFoundError": "No existe esa tarea o aplicación",
+ "logsGoneError": "Archivo(s) de registro no encontrados"
},
"email": {
"signature": {
@@ -1763,7 +1812,7 @@
"newPassword": {
"errorLength": "La contraseña debe tener al menos 8 y un máximo de 265 caracteres",
"title": "Establecer nueva contraseña",
- "password": "Nueva contraseña",
+ "password": "Nueva Contraseña",
"passwordRepeat": "Repetir Contraseña",
"errorMismatch": "Las contraseñas no coinciden"
},
@@ -1823,7 +1872,7 @@
"username": "Nombre de usuario",
"password": "Contraseña",
"2faToken": "Token 2FA (si está habilitado)",
- "signInAction": "Iniciar sesión",
+ "signInAction": "Iniciar Sesión",
"resetPasswordAction": "Resetear contraseña",
"errorIncorrect2FAToken": "El token 2FA es inválido",
"errorInternal": "Error interno, prueba de nuevo más tarde"
@@ -1879,5 +1928,6 @@
"newClient": "Nuevo cliente",
"empty": "No hay clientes aún"
}
- }
+ },
+ "automation": "Automatización"
}
diff --git a/dashboard/src/translation/nl.json b/dashboard/src/translation/nl.json
index 68e1d46e0..ae462bbef 100644
--- a/dashboard/src/translation/nl.json
+++ b/dashboard/src/translation/nl.json
@@ -22,7 +22,8 @@
"auth": {
"nosso": "Log in met specifiek account",
"sso": "Log in met Cloudron aanmeldgegevens",
- "email": "Log in met e-mailadres"
+ "email": "Log in met e-mailadres",
+ "openid": "Log in met Cloudron OpenID"
},
"addAppAction": "App toevoegen",
"addAppproxyAction": "App Proxy toevoegen",
@@ -1812,7 +1813,11 @@
"mountStatus": "Koppel status",
"localDirectory": "Lokale map",
"type": "Type",
- "remountActionTooltip": "Her-koppel Volume"
+ "remountActionTooltip": "Her-koppel Volume",
+ "editVolumeDialog": {
+ "title": "Bewerk volume {{ name }}"
+ },
+ "editActionTooltip": "Bewerk Volume"
},
"lang": {
"it": "Italiaans",
diff --git a/dashboard/src/translation/ru.json b/dashboard/src/translation/ru.json
index 19b78d99d..5a7a08a63 100644
--- a/dashboard/src/translation/ru.json
+++ b/dashboard/src/translation/ru.json
@@ -8,7 +8,8 @@
"auth": {
"sso": "Войдите, используя учётную запись Cloudron",
"email": "Войдите, используя email",
- "nosso": "Войдите, используя Вашу учётную запись"
+ "nosso": "Войдите, используя Вашу учётную запись",
+ "openid": "Войти с помощью Cloudron OpenID"
},
"noAccess": {
"description": "После открытия доступа приложения отобразятся здесь.",
@@ -234,7 +235,7 @@
"groupBaseDn": "Групповой корневой элемент",
"groupFilter": "Фильтр группы",
"groupnameField": "Поле с именем группы",
- "auth": "Войти",
+ "auth": "Авторизоваться",
"autocreateUsersOnLogin": "Автоматически создавать пользователей после их входа в Cloudron",
"showLogsAction": "Показать логи",
"syncAction": "Синхронизировать",
@@ -294,7 +295,7 @@
"description": "Ссылка для сброса пароля отправлена на электронную почту {{ email }}:",
"sendEmailLinkAction": "Отправить ссылку пользователю по электронной почте",
"emailSent": "Отправлено",
- "newLinkAction": "Отправить ссылку для сброса пароля",
+ "newLinkAction": "Отправить ссылку для сброса",
"reset2FAAction": "Сбросить 2FA",
"sendAction": "Отправить письмо",
"descriptionLink": "Скопировать ссылку для сброса пароля",
@@ -409,7 +410,7 @@
"changePassword": {
"currentPassword": "Текущий пароль",
"errorPasswordInvalid": "Пароль должен быть не менее 8 и не более 265 символов",
- "title": "Изменить пароль",
+ "title": "Изменить ваш пароль",
"newPassword": "Новый пароль",
"newPasswordRepeat": "Повторите новый пароль",
"errorPasswordRequired": "Требуется пароль",
@@ -976,7 +977,8 @@
"preserved": {
"description": "Хранить резервную копию, игнорируя политику хранения",
"tooltip": "Также будет сохранена почта и {{ appsLength } резервных копий."
- }
+ },
+ "remotePath": "Удаленный путь"
}
},
"branding": {
@@ -1018,7 +1020,8 @@
"acl": "Почтовый ACL (Access Control List)",
"maxMailSize": "Максимальный размер письма",
"solrFts": "Полный поиск по тексту (Solr)",
- "aclOverview": "{{ dnsblZonesCount }} DNSBL зон"
+ "aclOverview": "{{ dnsblZonesCount }} DNSBL зон",
+ "virtualAllMail": "Папка \"Вся почта\""
},
"eventlog": {
"title": "Журнал событий электронной почты",
@@ -1109,6 +1112,10 @@
},
"action": {
"queue": "Очередь"
+ },
+ "changeVirtualAllMailDialog": {
+ "title": "Папка \"Вся почта\"",
+ "description": "Папка \"Вся почта\" содержит все электронные письма из вашего почтового ящика. Данная папка может быть полезна в том случае, когда ваш почтовый клиент не поддерживает рекурсивный поиск по папкам."
}
},
"network": {
@@ -1806,7 +1813,11 @@
"title": "Тома",
"hostPath": "Назначение",
"description": "Тома - локальные или удаленные файловые системы. Они могут быть использованы для хранения данных приложений или для создания общей директории для нескольких приложений.",
- "localDirectory": "Локальный каталог"
+ "localDirectory": "Локальный каталог",
+ "editVolumeDialog": {
+ "title": "Редактирование тома {{ name }}"
+ },
+ "editActionTooltip": "Редактировать том"
},
"lang": {
"en": "Английский",
diff --git a/dashboard/src/translation/vi.json b/dashboard/src/translation/vi.json
index af385bf1f..0d256f5e6 100644
--- a/dashboard/src/translation/vi.json
+++ b/dashboard/src/translation/vi.json
@@ -18,12 +18,18 @@
"title": "Chưa có app cài đặt!",
"description": "Cài đặt một vài app nhé? Hãy xem trong Cửa hàng App"
},
- "groupsFilterHeader": "Chọn nhóm",
+ "groupsFilterHeader": "Tất cả Nhóm",
"auth": {
"email": "Đăng nhập bằng email",
"sso": "Đăng nhập với tên & mật khẩu trên Cloudron",
"nosso": "Đăng nhập vào tài khoản riêng"
- }
+ },
+ "addAppAction": "Thêm App",
+ "addApplinkAction": "Thêm đường link App",
+ "filter": {
+ "clearAll": "Xoá tất cả"
+ },
+ "addAppproxyAction": "Thêm proxy cho app"
},
"main": {
"logout": "Thoát",
@@ -32,7 +38,8 @@
"save": "Lưu",
"close": "Đóng",
"no": "Không",
- "yes": "Có"
+ "yes": "Có",
+ "delete": "Xoá"
},
"username": "Tên đăng nhập",
"displayName": "Tên hiển thị",
@@ -42,7 +49,8 @@
"pagination": {
"prev": "trước",
"next": "tiếp",
- "perPageSelector": "Hiển thị {{ n }} trên một trang"
+ "perPageSelector": "Hiển thị {{ n }} trên một trang",
+ "itemCount": "Đã tìm thấy {{ count }}"
},
"action": {
"reboot": "Khởi động lại",
@@ -79,7 +87,9 @@
"users": "Người dùng"
},
"enableAction": "Bật",
- "disableAction": "Tắt"
+ "disableAction": "Tắt",
+ "loadingPlaceholder": "Đang tải",
+ "settings": "Cài đặt"
},
"appstore": {
"title": "Cửa hàng App",
@@ -134,7 +144,8 @@
"configuredForCloudronEmail": "App này đã được cấu hình sẵn để sử dụng với Cloudron Email.",
"doInstallAction": "Tải về {{ dnsOverwrite ? 'and overwrite DNS' : '' }}",
"cloudflarePortWarning": "Cần tắt proxy Cloudflare để tên miền app này có thể truy cập được vào cổng",
- "titleAndVersion": "App này đóng gói phần mềm {{ title }} {{ version }}"
+ "titleAndVersion": "App này đóng gói phần mềm {{ title }} {{ version }}",
+ "portReadOnly": "chỉ-đọc"
},
"appNotFoundDialog": {
"title": "Không tìm thấy app",
@@ -256,7 +267,7 @@
"subscriptionRequired": "Chức năng này chỉ có trong gói trả phí.",
"require2FACheckbox": "Yêu cầu người dùng cài đặt Mã xác minh 2 bước",
"allowProfileEditCheckbox": "Cho phép người dùng chỉnh sửa tên và email",
- "title": "Cài đặt",
+ "title": "Cài đặt Người dùng",
"require2FAWarning": "Hãy cài đặt Mã xác minh 2 Bước cho tài khoản của bạn trước đề phòng bị khoá ra khỏi TK."
},
"groups": {
@@ -328,8 +339,9 @@
"label": "Giới hạn quyền truy cập"
},
"secret": {
- "label": "Mã bí mật",
- "description": "Tất cả những yêu cầu LDAP cần phải được xác minh với mã bí mật này và tên người dùng user DN {{ userDN }}"
+ "label": "Mật khẩu bind",
+ "description": "Tất cả những yêu cầu LDAP cần phải được xác minh với mã bí mật này và tên người dùng user DN {{ userDN }}",
+ "url": "URL máy chủ"
}
},
"userImportDialog": {
@@ -435,7 +447,8 @@
"description": "Mã API mới:",
"copyNow": "Xin copy mã API này bây giờ. Nó sẽ không được hiển thị lại vì lý do an ninh.",
"generateToken": "Tạo mã API",
- "name": "Tên cho mã API"
+ "name": "Tên cho mã API",
+ "access": "Truy cập API"
},
"enable2FAAction": "Bật xác minh hai bước",
"primaryEmail": "Email chính",
@@ -458,7 +471,10 @@
"name": "Tên",
"expiresAt": "Hết hiệu lực vào",
"lastUsed": "Lần dùng cuối",
- "neverUsed": "chưa từng dùng"
+ "neverUsed": "chưa từng dùng",
+ "readonly": "Chỉ đọc",
+ "scope": "Mức độ bao phủ",
+ "readwrite": "Đọc và Ghi"
},
"loginTokens": {
"title": "Mã đăng nhập",
@@ -540,7 +556,7 @@
"mountPoint": "Điểm mount",
"noopNote": "Lựa chọn này sẽ làm hỏng tính năng sao lưu và khôi phục của Cloudron và chỉ nên dùng khi test hệ thống. Xin đảm bảo rằng server được sao lưu toàn bộ bằng những phương tiện khác.",
"format": "Định dạng lưu trữ",
- "encryptedFilenames": "Mã hoá tên tập tin",
+ "encryptedFilenames": "Tên tập tin đã mã hoá",
"chown": "Hệ thống tập tin bên ngoài có hỗ trợ chown",
"username": "Tên đăng nhập",
"server": "IP hoặc hostname máy chủ",
@@ -552,7 +568,8 @@
"user": "Người dùng",
"privateKey": "Mật mã riêng",
"diskPath": "Đường dẫn đến ổ đĩa",
- "cifsSealSupport": "Dùng mã hoá SEAL. Cần SMB thấp nhất là phiên bản v3"
+ "cifsSealSupport": "Dùng mã hoá SEAL. Cần SMB thấp nhất là phiên bản v3",
+ "encryptFilenames": "Mã hoá tên tập tin"
},
"cleanupBackups": {
"description": "Các bản sao lưu được dọn sạch tự động dựa trên thời gian lưu giữ. Thao tác này sẽ xoá ngay lập tức các bản sao lưu đang có.",
@@ -879,7 +896,13 @@
},
"configureIpv6": {
"title": "Cài đặt nhà cung cấp IPv6"
- }
+ },
+ "trustedIps": {
+ "summary": "{{ trustCount }} địa chỉ IP được tin tưởng",
+ "description": "Những HTTP header từ những địa chỉ IP trùng khớp sẽ được chấp thuận cho qua",
+ "title": "Thiết lập những địa chỉ IP đáng tin cậy"
+ },
+ "trustedIpRanges": "Địa chỉ IP & Vùng được tin cậy "
},
"emails": {
"typeFilterHeader": "Tất cả sự kiện",
@@ -914,7 +937,7 @@
"locationPlaceholder": "Để trống để dùng tên miền gốc",
"location": "Vị trí",
"title": "Thay đổi vị trí đặt mail server",
- "description": "Cloudron sẽ thay đổi những giá trị DNS cần thiết cho tất cả tên miền và khởi động lại mail server. Những client nhận mail trên máy tính hay điện thoại cần được cài đặt lại để sử dụng vị trí mới này làm IMAP và SMTP server."
+ "description": "Hành động này sẽ di chuyển server IMAP và SMTP đến vị trí được xác định."
},
"eventlog": {
"searchPlaceholder": "Tìm kiếm",
@@ -933,7 +956,10 @@
"queued": "Xếp hàng",
"outgoing": "Gửi mail ra",
"incoming": "Nhận mail vào",
- "deferred": "Trì hoãn lại"
+ "deferred": "Trì hoãn lại",
+ "overQuotaInfo": "Hộp thư {{ mailbox }} đã đầy {{ quotaPercent }}%",
+ "underQuotaInfo": "Hộp thư {{ mailbox }} đã rơi xuống còn {{ quotaPercent }}% của hạn mức",
+ "quota": "Hạn mức hộp thư"
},
"empty": "Log sự kiện hiện đang trống.",
"details": "Chi tiết",
@@ -950,8 +976,8 @@
"solrEnabled": "Đã bật",
"solrDisabled": "Đã tắt",
"changeDomainProgress": "Thay đổi tên miền email:",
- "spamFilterOverview": "{{ blacklistCount }} email có trong danh sách đen.",
- "location": "Nơi đặt mail server",
+ "spamFilterOverview": "{{ blacklistCount }} email có trong danh sách bị chặn.",
+ "location": "Nơi đặt máy chủ mail",
"spamFilter": "Lọc spam",
"maxMailSize": "Kích cỡ mail tối đa",
"info": "Các cài đặt này áp dụng cho tất cả các tên miền.",
@@ -981,6 +1007,19 @@
"dnsblZonesInfo": "Địa chỉ IP đang muốn kết nối đến được dò tìm trong những danh sách IP bị chặn này",
"dnsblZonesPlaceholder": "Tên vùng (ghi xuống dòng)",
"title": "Đổi danh sách quản lý truy cập mail"
+ },
+ "queue": {
+ "empty": "Danh sách mail chờ đang trống",
+ "title": "Danh sách mail chờ gửi",
+ "rcptTo": "Gửi cho",
+ "mailFrom": "Đến từ",
+ "details": "Chi tiết",
+ "discardTooltip": "Bỏ qua",
+ "queueTime": "Thời gian chờ",
+ "resendTooltip": "Gửi lại ngay"
+ },
+ "action": {
+ "queue": "Cho vào hàng chờ gửi sau"
}
},
"branding": {
@@ -1009,10 +1048,11 @@
"selectPeriodLabel": "Chọn khoảng thời gian",
"cpuUsage": {
"graphTitle": "Phần trăm sử dụng",
- "title": "Dung lượng CPU"
+ "title": "Dung lượng CPU",
+ "graphSubtext": "Chỉ những app sử dụng hơn {{ threshold }} cpu mới được hiển thị"
},
"systemMemory": {
- "graphSubtext": "Các giá trị bộ nhớ riêng từng app không hiển thị chồng lên nhau",
+ "graphSubtext": "Chỉ những app sử dụng hơn {{ threshold }} bộ nhớ mới được hiển thị",
"title": "Bộ nhớ hệ thống"
},
"diskUsage": {
@@ -1020,7 +1060,11 @@
"diskContent": "Ổ đĩa {{ type }} này hiện chứa",
"usageInfo": "Còn {{ available | prettyDiskSize }} trống trong tổng {{ size | prettyDiskSize }}",
"mountedAt": "{{ filesystem }} được gắn ở {{ mountpoint }}",
- "title": "Dung lượng ổ đĩa"
+ "title": "Dung lượng ổ đĩa",
+ "usedInfo": "{{ used }} đã dùng trong tổng {{ size }}",
+ "volumeContent": "Ổ đĩa này thuộc volume {{ name }}",
+ "uninstalledApp": "App đã xoá",
+ "diskSpeed": "Tốc độ: {{ speed }} MB/s"
},
"title": "Hệ thống"
},
@@ -1265,7 +1309,9 @@
"logs": {
"download": "Tải xuống tất cả log",
"clear": "Làm sạch phần xem log",
- "title": "Log"
+ "title": "Log",
+ "notFoundError": "Không có tác vụ hay app đó",
+ "logsGoneError": "Tập tin log không được tìm thấy"
},
"notifications": {
"clearAll": "Xoá hết",
@@ -1323,7 +1369,11 @@
"wellKnownDescription": "Những giá trị nhập vào này sẽ được dùng bởi Cloudron để phản hồi về những đường link /.well-known/. Lưu ý rằng một app cần được đang chạy cài đặt sẵn trên tên miền gốc {{ domain }} để tính năng này có thể hoạt động được. Xem phần hướng dẫn sử dụng để biết thêm thông tin.",
"vultrToken": "Mật mã Vultr",
"jitsiHostname": "Vị trí Jitsi",
- "hetznerToken": "Mật mã Hetzner"
+ "hetznerToken": "Mật mã Hetzner",
+ "cloudflareDefaultProxyStatus": "Bật tính năng proxy cho những bản ghi DNS mới",
+ "porkbunSecretapikey": "Mã bí mật API",
+ "bunnyAccessKey": "Mã truy cập Bunny",
+ "porkbunApikey": "Key API"
},
"subscriptionRequired": {
"description": "Để thêm tên miền, hãy đăng ký gói trả phí.",
@@ -1358,7 +1408,8 @@
"domainWellKnown": {
"title": "Những vị trí Well-Known của {{ domain }}"
},
- "tooltipWellKnown": "Cài đặt những vị trí Well-Known"
+ "tooltipWellKnown": "Cài đặt những vị trí Well-Known",
+ "count": "Tổng số tên miền: {{ count }}"
},
"app": {
"appInfo": {
diff --git a/dashboard/src/views/domains.html b/dashboard/src/views/domains.html
index 77318c1c2..ccc61128a 100644
--- a/dashboard/src/views/domains.html
+++ b/dashboard/src/views/domains.html
@@ -146,6 +146,12 @@