mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge branch 'stretch-unstable' into improve-permission-interface
This commit is contained in:
commit
f0e8ef8456
12 changed files with 1227 additions and 485 deletions
16
README.md
16
README.md
|
@ -1,19 +1,19 @@
|
||||||
[](https://travis-ci.org/YunoHost/yunohost)
|
[](https://travis-ci.org/YunoHost/yunohost)
|
||||||
[](https://github.com/YunoHost/yunohost/blob/stretch-unstable/LICENSE)
|
[](https://github.com/YunoHost/yunohost/blob/stretch-unstable/LICENSE)
|
||||||
|
|
||||||
# YunoHost core
|
# YunoHost core
|
||||||
|
|
||||||
This repository is the core of YunoHost code.
|
This repository is the core of YunoHost code.
|
||||||
|
|
||||||
- [YunoHost project website](https://yunohost.org)
|
- [Project website](https://yunohost.org)
|
||||||
- [Butracker](https://github.com/YunoHost/issues).
|
- [Bugtracker](https://github.com/YunoHost/issues).
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
- You can develop on this repository using [ynh-dev](https://github.com/YunoHost/ynh-dev) with `use-git` sub-command.
|
- You can develop on this repository using [ynh-dev](https://github.com/YunoHost/ynh-dev) with `use-git` sub-command.
|
||||||
- On this repository we are [following this workflow](https://yunohost.org/#/build_system_en): `stable <- testing <- unstable <- your_branch`.
|
- On this repository we are [following this workflow](https://yunohost.org/#/build_system_en): `stable ← testing ← unstable ← your_branch`.
|
||||||
- Note: if you modify python scripts, you will have to modifiy the actions map.
|
- Note: If you modify Python scripts, you will have to modifiy the actions map.
|
||||||
- You can help with translation on [our translation platform](https://translate.yunohost.org/engage/yunohost/?utm_source=widget)
|
- You can help translate YunoHost on our [translation platform](https://translate.yunohost.org/engage/yunohost/?utm_source=widget)
|
||||||
|
|
||||||
<img src="https://translate.yunohost.org/widgets/yunohost/-/multi-auto.svg" alt="Translation status" />
|
<img src="https://translate.yunohost.org/widgets/yunohost/-/multi-auto.svg" alt="Translation status" />
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ This repository is the core of YunoHost code.
|
||||||
- Python core scripts are accessible through two interfaces thanks to the [moulinette framework](https://github.com/YunoHost/moulinette):
|
- Python core scripts are accessible through two interfaces thanks to the [moulinette framework](https://github.com/YunoHost/moulinette):
|
||||||
- [CLI](https://en.wikipedia.org/wiki/Command-line_interface) for `yunohost` command.
|
- [CLI](https://en.wikipedia.org/wiki/Command-line_interface) for `yunohost` command.
|
||||||
- [API](https://en.wikipedia.org/wiki/Application_programming_interface) for [web administration module](https://github.com/YunoHost/yunohost-admin) (other modules could be implemented).
|
- [API](https://en.wikipedia.org/wiki/Application_programming_interface) for [web administration module](https://github.com/YunoHost/yunohost-admin) (other modules could be implemented).
|
||||||
- You can find more details about how YunoHost works on this [documentation (in french)](https://yunohost.org/#/package_list_fr).
|
- You can find more details about how YunoHost works on this [documentation (in French)](https://yunohost.org/#/package_list_fr).
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
|
@ -45,4 +45,4 @@ This repository is the core of YunoHost code.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
As [other components of YunoHost core code](https://yunohost.org/#/faq_en), this repository is under GNU AGPL v.3 license.
|
As [other components of YunoHost core code](https://yunohost.org/#/faq_en), this repository is licensed GNU AGPL v3.
|
||||||
|
|
|
@ -339,7 +339,7 @@ ynh_backup_if_checksum_is_different () {
|
||||||
backup_file_checksum=""
|
backup_file_checksum=""
|
||||||
if [ -n "$checksum_value" ]
|
if [ -n "$checksum_value" ]
|
||||||
then # Proceed only if a value was stored into the app settings
|
then # Proceed only if a value was stored into the app settings
|
||||||
if ! echo "$checksum_value $file" | sudo md5sum -c --status
|
if [ -e $file ] && ! echo "$checksum_value $file" | sudo md5sum -c --status
|
||||||
then # If the checksum is now different
|
then # If the checksum is now different
|
||||||
backup_file_checksum="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')"
|
backup_file_checksum="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')"
|
||||||
sudo mkdir -p "$(dirname "$backup_file_checksum")"
|
sudo mkdir -p "$(dirname "$backup_file_checksum")"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
"app_location_install_failed": "Unable to install the app in this location because it conflit with the app '{other_app}' already installed on '{other_path}'",
|
"app_location_install_failed": "Unable to install the app in this location because it conflit with the app '{other_app}' already installed on '{other_path}'",
|
||||||
"app_location_unavailable": "This url is not available or conflicts with an already installed app",
|
"app_location_unavailable": "This url is not available or conflicts with an already installed app",
|
||||||
"app_manifest_invalid": "Invalid app manifest: {error}",
|
"app_manifest_invalid": "Invalid app manifest: {error}",
|
||||||
"app_no_upgrade": "البرمجيات لا تحتاج إلى تحديث",
|
"app_no_upgrade": "ليس هناك أي تطبيق بحاجة إلى تحديث",
|
||||||
"app_not_correctly_installed": "يبدو أن التطبيق {app:s} لم يتم تنصيبه بشكل صحيح",
|
"app_not_correctly_installed": "يبدو أن التطبيق {app:s} لم يتم تنصيبه بشكل صحيح",
|
||||||
"app_not_installed": "إنّ التطبيق {app:s} غير مُنصَّب",
|
"app_not_installed": "إنّ التطبيق {app:s} غير مُنصَّب",
|
||||||
"app_not_properly_removed": "لم يتم حذف تطبيق {app:s} بشكلٍ جيّد",
|
"app_not_properly_removed": "لم يتم حذف تطبيق {app:s} بشكلٍ جيّد",
|
||||||
|
@ -37,17 +37,17 @@
|
||||||
"app_unsupported_remote_type": "Unsupported remote type used for the app",
|
"app_unsupported_remote_type": "Unsupported remote type used for the app",
|
||||||
"app_upgrade_app_name": "جارٍ تحديث تطبيق {app}…",
|
"app_upgrade_app_name": "جارٍ تحديث تطبيق {app}…",
|
||||||
"app_upgrade_failed": "تعذرت عملية ترقية {app:s}",
|
"app_upgrade_failed": "تعذرت عملية ترقية {app:s}",
|
||||||
"app_upgrade_some_app_failed": "تعذرت عملية ترقية بعض البرمجيات",
|
"app_upgrade_some_app_failed": "تعذرت عملية ترقية بعض التطبيقات",
|
||||||
"app_upgraded": "تم تحديث التطبيق {app:s}",
|
"app_upgraded": "تم تحديث التطبيق {app:s}",
|
||||||
"appslist_corrupted_json": "Could not load the application lists. It looks like {filename:s} is corrupted.",
|
"appslist_corrupted_json": "Could not load the application lists. It looks like {filename:s} is corrupted.",
|
||||||
"appslist_could_not_migrate": "Could not migrate app list {appslist:s} ! Unable to parse the url... The old cron job has been kept in {bkp_file:s}.",
|
"appslist_could_not_migrate": "Could not migrate app list {appslist:s} ! Unable to parse the url... The old cron job has been kept in {bkp_file:s}.",
|
||||||
"appslist_fetched": "تم جلب قائمة تطبيقات {appslist:s}",
|
"appslist_fetched": "تم جلب قائمة تطبيقات {appslist:s}",
|
||||||
"appslist_migrating": "Migrating application list {appslist:s} …",
|
"appslist_migrating": "Migrating application list {appslist:s} …",
|
||||||
"appslist_name_already_tracked": "There is already a registered application list with name {name:s}.",
|
"appslist_name_already_tracked": "There is already a registered application list with name {name:s}.",
|
||||||
"appslist_removed": "تم حذف قائمة البرمجيات {appslist:s}",
|
"appslist_removed": "تم حذف قائمة التطبيقات {appslist:s}",
|
||||||
"appslist_retrieve_bad_format": "Retrieved file for application list {appslist:s} is not valid",
|
"appslist_retrieve_bad_format": "Retrieved file for application list {appslist:s} is not valid",
|
||||||
"appslist_retrieve_error": "Unable to retrieve the remote application list {appslist:s}: {error:s}",
|
"appslist_retrieve_error": "Unable to retrieve the remote application list {appslist:s}: {error:s}",
|
||||||
"appslist_unknown": "قائمة البرمجيات {appslist:s} مجهولة.",
|
"appslist_unknown": "قائمة التطبيقات {appslist:s} مجهولة.",
|
||||||
"appslist_url_already_tracked": "There is already a registered application list with url {url:s}.",
|
"appslist_url_already_tracked": "There is already a registered application list with url {url:s}.",
|
||||||
"ask_current_admin_password": "كلمة السر الإدارية الحالية",
|
"ask_current_admin_password": "كلمة السر الإدارية الحالية",
|
||||||
"ask_email": "عنوان البريد الإلكتروني",
|
"ask_email": "عنوان البريد الإلكتروني",
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
"certmanager_attempt_to_replace_valid_cert": "You are attempting to overwrite a good and valid certificate for domain {domain:s}! (Use --force to bypass)",
|
"certmanager_attempt_to_replace_valid_cert": "You are attempting to overwrite a good and valid certificate for domain {domain:s}! (Use --force to bypass)",
|
||||||
"certmanager_cannot_read_cert": "Something wrong happened when trying to open current certificate for domain {domain:s} (file: {file:s}), reason: {reason:s}",
|
"certmanager_cannot_read_cert": "Something wrong happened when trying to open current certificate for domain {domain:s} (file: {file:s}), reason: {reason:s}",
|
||||||
"certmanager_cert_install_success": "تمت عملية تنصيب شهادة Let's Encrypt بنجاح على النطاق {domain:s} !",
|
"certmanager_cert_install_success": "تمت عملية تنصيب شهادة Let's Encrypt بنجاح على النطاق {domain:s} !",
|
||||||
"certmanager_cert_install_success_selfsigned": "Successfully installed a self-signed certificate for domain {domain:s}!",
|
"certmanager_cert_install_success_selfsigned": "نجحت عملية تثبيت الشهادة الموقعة ذاتيا الخاصة بالنطاق {domain:s}!",
|
||||||
"certmanager_cert_renew_success": "نجحت عملية تجديد شهادة Let's Encrypt الخاصة باسم النطاق {domain:s} !",
|
"certmanager_cert_renew_success": "نجحت عملية تجديد شهادة Let's Encrypt الخاصة باسم النطاق {domain:s} !",
|
||||||
"certmanager_cert_signing_failed": "فشل إجراء توقيع الشهادة الجديدة",
|
"certmanager_cert_signing_failed": "فشل إجراء توقيع الشهادة الجديدة",
|
||||||
"certmanager_certificate_fetching_or_enabling_failed": "Sounds like enabling the new certificate for {domain:s} failed somehow…",
|
"certmanager_certificate_fetching_or_enabling_failed": "Sounds like enabling the new certificate for {domain:s} failed somehow…",
|
||||||
|
@ -232,7 +232,7 @@
|
||||||
"migrations_no_migrations_to_run": "No migrations to run",
|
"migrations_no_migrations_to_run": "No migrations to run",
|
||||||
"migrations_show_currently_running_migration": "Running migration {number} {name}…",
|
"migrations_show_currently_running_migration": "Running migration {number} {name}…",
|
||||||
"migrations_show_last_migration": "Last ran migration is {}",
|
"migrations_show_last_migration": "Last ran migration is {}",
|
||||||
"migrations_skip_migration": "جارٍ تجاهل التهجير {number} {name}…",
|
"migrations_skip_migration": "جارٍ تجاهل التهجير {id}…",
|
||||||
"monitor_disabled": "The server monitoring has been disabled",
|
"monitor_disabled": "The server monitoring has been disabled",
|
||||||
"monitor_enabled": "The server monitoring has been enabled",
|
"monitor_enabled": "The server monitoring has been enabled",
|
||||||
"monitor_glances_con_failed": "Unable to connect to Glances server",
|
"monitor_glances_con_failed": "Unable to connect to Glances server",
|
||||||
|
@ -301,7 +301,7 @@
|
||||||
"service_add_failed": "تعذرت إضافة خدمة '{service:s}'",
|
"service_add_failed": "تعذرت إضافة خدمة '{service:s}'",
|
||||||
"service_added": "The service '{service:s}' has been added",
|
"service_added": "The service '{service:s}' has been added",
|
||||||
"service_already_started": "Service '{service:s}' has already been started",
|
"service_already_started": "Service '{service:s}' has already been started",
|
||||||
"service_already_stopped": "Service '{service:s}' has already been stopped",
|
"service_already_stopped": "إنّ خدمة '{service:s}' متوقفة مِن قبلُ",
|
||||||
"service_cmd_exec_failed": "Unable to execute command '{command:s}'",
|
"service_cmd_exec_failed": "Unable to execute command '{command:s}'",
|
||||||
"service_conf_file_backed_up": "The configuration file '{conf}' has been backed up to '{backup}'",
|
"service_conf_file_backed_up": "The configuration file '{conf}' has been backed up to '{backup}'",
|
||||||
"service_conf_file_copy_failed": "Unable to copy the new configuration file '{new}' to '{conf}'",
|
"service_conf_file_copy_failed": "Unable to copy the new configuration file '{new}' to '{conf}'",
|
||||||
|
@ -316,7 +316,7 @@
|
||||||
"service_conf_updated": "The configuration has been updated for service '{service}'",
|
"service_conf_updated": "The configuration has been updated for service '{service}'",
|
||||||
"service_conf_would_be_updated": "The configuration would have been updated for service '{service}'",
|
"service_conf_would_be_updated": "The configuration would have been updated for service '{service}'",
|
||||||
"service_disable_failed": "",
|
"service_disable_failed": "",
|
||||||
"service_disabled": "The service '{service:s}' has been disabled",
|
"service_disabled": "تم تعطيل خدمة '{service:s}'",
|
||||||
"service_enable_failed": "",
|
"service_enable_failed": "",
|
||||||
"service_enabled": "تم تنشيط خدمة '{service:s}'",
|
"service_enabled": "تم تنشيط خدمة '{service:s}'",
|
||||||
"service_no_log": "ليس لخدمة '{service:s}' أي سِجلّ للعرض",
|
"service_no_log": "ليس لخدمة '{service:s}' أي سِجلّ للعرض",
|
||||||
|
@ -329,7 +329,7 @@
|
||||||
"service_started": "تم إطلاق تشغيل خدمة '{service:s}'",
|
"service_started": "تم إطلاق تشغيل خدمة '{service:s}'",
|
||||||
"service_status_failed": "Unable to determine status of service '{service:s}'",
|
"service_status_failed": "Unable to determine status of service '{service:s}'",
|
||||||
"service_stop_failed": "",
|
"service_stop_failed": "",
|
||||||
"service_stopped": "The service '{service:s}' has been stopped",
|
"service_stopped": "تمّ إيقاف خدمة '{service:s}'",
|
||||||
"service_unknown": "Unknown service '{service:s}'",
|
"service_unknown": "Unknown service '{service:s}'",
|
||||||
"ssowat_conf_generated": "The SSOwat configuration has been generated",
|
"ssowat_conf_generated": "The SSOwat configuration has been generated",
|
||||||
"ssowat_conf_updated": "The SSOwat configuration has been updated",
|
"ssowat_conf_updated": "The SSOwat configuration has been updated",
|
||||||
|
@ -343,11 +343,11 @@
|
||||||
"unlimit": "دون تحديد الحصة",
|
"unlimit": "دون تحديد الحصة",
|
||||||
"unrestore_app": "App '{app:s}' will not be restored",
|
"unrestore_app": "App '{app:s}' will not be restored",
|
||||||
"update_cache_failed": "Unable to update APT cache",
|
"update_cache_failed": "Unable to update APT cache",
|
||||||
"updating_apt_cache": "جارٍ تحديث قائمة الحُزم المتوفرة …",
|
"updating_apt_cache": "جارٍ جلب قائمة حُزم النظام المحدّثة المتوفرة…",
|
||||||
"upgrade_complete": "إكتملت عملية الترقية و التحديث",
|
"upgrade_complete": "إكتملت عملية الترقية و التحديث",
|
||||||
"upgrading_packages": "عملية ترقية الحُزم جارية …",
|
"upgrading_packages": "عملية ترقية الحُزم جارية …",
|
||||||
"upnp_dev_not_found": "No UPnP device found",
|
"upnp_dev_not_found": "No UPnP device found",
|
||||||
"upnp_disabled": "UPnP has been disabled",
|
"upnp_disabled": "تم تعطيل UPnP",
|
||||||
"upnp_enabled": "UPnP has been enabled",
|
"upnp_enabled": "UPnP has been enabled",
|
||||||
"upnp_port_open_failed": "Unable to open UPnP ports",
|
"upnp_port_open_failed": "Unable to open UPnP ports",
|
||||||
"user_created": "تم إنشاء المستخدم",
|
"user_created": "تم إنشاء المستخدم",
|
||||||
|
@ -412,7 +412,7 @@
|
||||||
"service_description_dnsmasq": "مُكلَّف بتحليل أسماء النطاقات (DNS)",
|
"service_description_dnsmasq": "مُكلَّف بتحليل أسماء النطاقات (DNS)",
|
||||||
"service_description_mysql": "يقوم بتخزين بيانات التطبيقات (قواعد بيانات SQL)",
|
"service_description_mysql": "يقوم بتخزين بيانات التطبيقات (قواعد بيانات SQL)",
|
||||||
"service_description_rspamd": "يقوم بتصفية البريد المزعج و إدارة ميزات أخرى للبريد",
|
"service_description_rspamd": "يقوم بتصفية البريد المزعج و إدارة ميزات أخرى للبريد",
|
||||||
"service_description_yunohost-firewall": "يريد فتح و غلق منافذ الإتصال إلى الخدمات",
|
"service_description_yunohost-firewall": "يُدير فتح وإغلاق منافذ الإتصال إلى الخدمات",
|
||||||
"users_available": "المستخدمون المتوفرون:",
|
"users_available": "المستخدمون المتوفرون:",
|
||||||
"aborting": "إلغاء.",
|
"aborting": "إلغاء.",
|
||||||
"admin_password_too_long": "يرجى اختيار كلمة سرية أقصر مِن 127 حرف",
|
"admin_password_too_long": "يرجى اختيار كلمة سرية أقصر مِن 127 حرف",
|
||||||
|
@ -426,5 +426,22 @@
|
||||||
"global_settings_setting_security_password_admin_strength": "قوة الكلمة السرية الإدارية",
|
"global_settings_setting_security_password_admin_strength": "قوة الكلمة السرية الإدارية",
|
||||||
"global_settings_setting_security_password_user_strength": "قوة الكلمة السرية للمستخدم",
|
"global_settings_setting_security_password_user_strength": "قوة الكلمة السرية للمستخدم",
|
||||||
"log_app_addaccess": "إضافة ترخيص بالنفاذ إلى '{}'",
|
"log_app_addaccess": "إضافة ترخيص بالنفاذ إلى '{}'",
|
||||||
"password_too_simple_1": "يجب أن يكون طول الكلمة السرية على الأقل 8 حروف"
|
"password_too_simple_1": "يجب أن يكون طول الكلمة السرية على الأقل 8 حروف",
|
||||||
|
"service_description_php7.0-fpm": "يُشغّل التطبيقات المكتوبة بلغة الـ PHP على Nginx",
|
||||||
|
"updating_app_lists": "جارٍ جلب التحديثات المتوفرة الخاصة بالتطبيقات…",
|
||||||
|
"already_up_to_date": "كل شيء على ما يرام! ليس هناك ما يتطلّب تحديثًا!",
|
||||||
|
"service_description_nslcd": "يدير اتصال متسخدمي واي يونوهوست عبر طرفية سطر الأوامر",
|
||||||
|
"service_description_slapd": "يخزّن المستخدمين والنطاقات والمعلومات المتعلقة بها",
|
||||||
|
"service_reloaded": "تم إعادة تحميل خدمة '{service:s}'",
|
||||||
|
"service_restarted": "تم إعادة تشغيل خدمة '{service:s}'",
|
||||||
|
"group_unknown": "الفريق {group:s} مجهول",
|
||||||
|
"group_deletion_failed": "فشلت عملية حذف الفريق '{group}'",
|
||||||
|
"group_deleted": "تم حذف الفريق '{group}'",
|
||||||
|
"group_created": "تم إنشاء الفريق '{group}' بنجاح",
|
||||||
|
"group_name_already_exist": "الفريق {name:s} موجود بالفعل",
|
||||||
|
"error_when_removing_sftpuser_group": "حدث خطأ أثناء محاولة حذف فريق sftpusers",
|
||||||
|
"dyndns_could_not_check_available": "لا يمكن التحقق مِن أنّ {domain:s} متوفر على {provider:s}.",
|
||||||
|
"backup_mount_archive_for_restore": "جارٍ تهيئة النسخة الاحتياطية للاسترجاع…",
|
||||||
|
"root_password_replaced_by_admin_password": "لقد تم استبدال كلمة سر الجذر root بالكلمة الإدارية لـ admin.",
|
||||||
|
"app_upgrade_stopped": "لقد تم إلغاء تحديث كافة التطبيقات لتجنب حادث بسبب فشل تحديث التطبيق السابق"
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,7 @@
|
||||||
"executing_script": "Execució de l'script « {script:s} »…",
|
"executing_script": "Execució de l'script « {script:s} »…",
|
||||||
"extracting": "Extracció en curs…",
|
"extracting": "Extracció en curs…",
|
||||||
"dyndns_cron_installed": "S'ha instal·lat la tasca cron pel DynDNS",
|
"dyndns_cron_installed": "S'ha instal·lat la tasca cron pel DynDNS",
|
||||||
"dyndns_cron_remove_failed": "No s'ha pogut eliminar la tasca cron pel DynDNS",
|
"dyndns_cron_remove_failed": "No s'ha pogut eliminar la tasca cron per a DynDNS: {error}",
|
||||||
"dyndns_cron_removed": "S'ha eliminat la tasca cron pel DynDNS",
|
"dyndns_cron_removed": "S'ha eliminat la tasca cron pel DynDNS",
|
||||||
"experimental_feature": "Atenció: aquesta funcionalitat és experimental i no es considera estable, no s'ha d'utilitzar a excepció de saber el que esteu fent.",
|
"experimental_feature": "Atenció: aquesta funcionalitat és experimental i no es considera estable, no s'ha d'utilitzar a excepció de saber el que esteu fent.",
|
||||||
"field_invalid": "Camp incorrecte « {:s} »",
|
"field_invalid": "Camp incorrecte « {:s} »",
|
||||||
|
@ -581,5 +581,6 @@
|
||||||
"system_groupname_exists": "El nom de grup ja existeix en el sistema de grups",
|
"system_groupname_exists": "El nom de grup ja existeix en el sistema de grups",
|
||||||
"tools_update_failed_to_app_fetchlist": "No s'ha pogut actualitzar la llista d'aplicacions de YunoHost a causa de: {error}",
|
"tools_update_failed_to_app_fetchlist": "No s'ha pogut actualitzar la llista d'aplicacions de YunoHost a causa de: {error}",
|
||||||
"user_already_in_group": "L'usuari {user:s} ja és en el grup {group:s}",
|
"user_already_in_group": "L'usuari {user:s} ja és en el grup {group:s}",
|
||||||
"user_not_in_group": "L'usuari {user:s} no és en el grup {group:s}"
|
"user_not_in_group": "L'usuari {user:s} no és en el grup {group:s}",
|
||||||
|
"migration_description_0012_postgresql_password_to_md5_authentication": "Força l'autenticació postgresql a fer servir md5 per a les connexions locals"
|
||||||
}
|
}
|
||||||
|
|
|
@ -301,5 +301,58 @@
|
||||||
"backup_archive_writing_error": "Die Dateien konnten nicht in der komprimierte Archiv-Backup hinzugefügt werden",
|
"backup_archive_writing_error": "Die Dateien konnten nicht in der komprimierte Archiv-Backup hinzugefügt werden",
|
||||||
"app_change_url_success": "Erfolgreiche Änderung der URL von {app:s} zu {domain:s}{path:s}",
|
"app_change_url_success": "Erfolgreiche Änderung der URL von {app:s} zu {domain:s}{path:s}",
|
||||||
"backup_applying_method_borg": "Sende alle Dateien zur Sicherung ins borg-backup repository...",
|
"backup_applying_method_borg": "Sende alle Dateien zur Sicherung ins borg-backup repository...",
|
||||||
"invalid_url_format": "ungültiges URL Format"
|
"invalid_url_format": "ungültiges URL Format",
|
||||||
|
"global_settings_bad_type_for_setting": "Falscher Typ für Einstellung {setting: s}. Empfangen: {receive_type: s}, aber erwartet: {expected_type: s}",
|
||||||
|
"global_settings_bad_choice_for_enum": "Falsche Wahl für die Einstellung {setting: s}. Habe '{choice: s}' erhalten, aber es stehen nur folgende Auswahlmöglichkeiten zur Verfügung: {available_choices: s}",
|
||||||
|
"file_does_not_exist": "Die Datei {path: s} existiert nicht.",
|
||||||
|
"experimental_feature": "Warnung: Diese Funktion ist experimentell und gilt nicht als stabil. Sie sollten sie nur verwenden, wenn Sie wissen, was Sie tun.",
|
||||||
|
"error_when_removing_sftpuser_group": "Fehler beim Versuch, die Gruppe sftpusers zu entfernen",
|
||||||
|
"edit_permission_with_group_all_users_not_allowed": "Sie dürfen die Berechtigung für die Gruppe \"all_users\" nicht bearbeiten. Verwenden Sie stattdessen \"yunohost user permission clear APP\" oder \"yunohost user permission add APP -u USER\".",
|
||||||
|
"edit_group_not_allowed": "Du bist nicht berechtigt zum Bearbeiten der Gruppe {group: s}",
|
||||||
|
"dyndns_domain_not_provided": "Der Dyndns-Anbieter {provider: s} kann die Domain(s) {domain: s} nicht bereitstellen.",
|
||||||
|
"dyndns_could_not_check_available": "Konnte nicht überprüfen, ob {domain: s} auf {provider: s} verfügbar ist.",
|
||||||
|
"dyndns_could_not_check_provide": "Konnte nicht überprüft, ob {provider: s} die Domain(s) {domain: s} bereitstellen kann.",
|
||||||
|
"domain_dyndns_dynette_is_unreachable": "YunoHost dynette kann nicht erreicht werden, entweder ist Ihr YunoHost nicht korrekt mit dem Internet verbunden oder der dynette-Server ist inaktiv. Fehler: {error}",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "Dieser Befehl zeigt Ihnen, was die * empfohlene * Konfiguration ist. Die DNS-Konfiguration wird NICHT für Sie eingerichtet. Es liegt in Ihrer Verantwortung, Ihre DNS-Zone in Ihrem Registrar gemäß dieser Empfehlung zu konfigurieren.",
|
||||||
|
"dpkg_lock_not_available": "Dieser Befehl kann momentan nicht ausgeführt werden, da anscheinend ein anderes Programm die Sperre von dpkg (dem Systempaket-Manager) verwendet",
|
||||||
|
"confirm_app_install_thirdparty": "WARNUNG! Das Installieren von Anwendungen von Drittanbietern kann die Integrität und Sicherheit Deines Systems beeinträchtigen. Du solltest es wahrscheinlich NICHT installieren, es sei denn, Du weisst, was Du tust. Bist du bereit, dieses Risiko einzugehen? [{answers: s}] ",
|
||||||
|
"confirm_app_install_danger": "WARNUNG! Diese Anwendung ist noch experimentell (wenn nicht ausdrücklich \"not working\"/\"funktioniert nicht\") und es ist wahrscheinlich, dass Dein System Schaden nimmt! Du solltest es wahrscheinlich NICHT installieren, es sei denn, Du weisst, was Du tust. Bist du bereit, dieses Risiko einzugehen? [{answers: s}] ",
|
||||||
|
"confirm_app_install_warning": "Warnung: Diese Anwendung funktioniert möglicherweise, ist jedoch nicht gut in YunoHost integriert. Einige Funktionen wie Single Sign-On und Backup / Restore sind möglicherweise nicht verfügbar. Trotzdem installieren? [{answers: s}] ",
|
||||||
|
"backup_with_no_restore_script_for_app": "App {app: s} hat kein Wiederherstellungsskript. Das Backup dieser App kann nicht automatisch wiederhergestellt werden.",
|
||||||
|
"backup_with_no_backup_script_for_app": "App {app: s} hat kein Sicherungsskript. Ignoriere es.",
|
||||||
|
"backup_unable_to_organize_files": "Dateien im Archiv können mit der schnellen Methode nicht organisiert werden",
|
||||||
|
"backup_system_part_failed": "Der Systemteil '{part: s}' kann nicht gesichert werden",
|
||||||
|
"backup_permission": "Sicherungsberechtigung für App {app: s}",
|
||||||
|
"backup_output_symlink_dir_broken": "Sie haben einen fehlerhaften Symlink anstelle Ihres Archivverzeichnisses '{path: s}'. Möglicherweise haben Sie ein spezielles Setup, um Ihre Daten auf einem anderen Dateisystem zu sichern. In diesem Fall haben Sie wahrscheinlich vergessen, Ihre Festplatte oder Ihren USB-Schlüssel erneut einzuhängen oder anzuschließen.",
|
||||||
|
"backup_mount_archive_for_restore": "Archiv für Wiederherstellung vorbereiten…",
|
||||||
|
"backup_method_tar_finished": "Sicherungs-Tar-Archiv erstellt",
|
||||||
|
"backup_method_custom_finished": "Benutzerdefinierte Sicherungsmethode '{method: s}' beendet",
|
||||||
|
"backup_method_copy_finished": "Sicherungskopie beendet",
|
||||||
|
"backup_method_borg_finished": "Backup in Borg beendet",
|
||||||
|
"backup_custom_need_mount_error": "Bei der benutzerdefinierten Sicherungsmethode ist beim Arbeitsschritt \"Braucht ein Einhängen/Verbinden\" (need_mount) ein Fehler aufgetreten",
|
||||||
|
"backup_custom_mount_error": "Bei der benutzerdefinierten Sicherungsmethode ist beim Arbeitsschritt \"Einhängen/Verbinden\" ein Fehler aufgetreten",
|
||||||
|
"backup_custom_backup_error": "Bei der benutzerdefinierten Sicherungsmethode ist beim Arbeitsschritt \"Sicherung\" ein Fehler aufgetreten",
|
||||||
|
"backup_csv_creation_failed": "Die CSV-Datei, die für zukünftige Wiederherstellungsvorgänge erforderlich ist, kann nicht erstellt werden",
|
||||||
|
"backup_couldnt_bind": "{Src: s} konnte nicht an {dest: s} angebunden werden.",
|
||||||
|
"backup_borg_not_implemented": "Die Borg-Sicherungsmethode ist noch nicht implementiert",
|
||||||
|
"backup_ask_for_copying_if_needed": "Einige Dateien konnten mit der Methode, die es vermeidet vorübergehend Speicherplatz auf dem System zu verschwenden, nicht gesichert werden. Zur Durchführung der Sicherung sollten vorübergehend {size: s} MB verwendet werden. Sind Sie einverstanden?",
|
||||||
|
"backup_actually_backuping": "Erstelle nun ein Backup-Archiv aus den gesammelten Dateien …",
|
||||||
|
"ask_path": "Pfad",
|
||||||
|
"ask_new_path": "Neuer Pfad",
|
||||||
|
"ask_new_domain": "Neue Domain",
|
||||||
|
"apps_permission_restoration_failed": "Die Berechtigung '{permission: s}' für die Wiederherstellung der App {app: s} ist fehlgeschlagen",
|
||||||
|
"apps_permission_not_found": "Keine Berechtigung für die installierten Apps gefunden",
|
||||||
|
"app_upgrade_some_app_failed": "Einige Anwendungen können nicht aktualisiert werden",
|
||||||
|
"app_upgrade_app_name": "App {App} wird jetzt aktualisiert…",
|
||||||
|
"app_upgrade_several_apps": "Die folgenden Apps werden aktualisiert: {apps}",
|
||||||
|
"app_start_restore": "Anwendung {app} wird wiederhergestellt…",
|
||||||
|
"app_start_backup": "Sammeln von Dateien, die für {app} gesichert werden sollen…",
|
||||||
|
"app_start_remove": "Anwendung {app} wird entfernt…",
|
||||||
|
"app_start_install": "Anwendung {app} wird installiert…",
|
||||||
|
"app_not_upgraded": "Die folgenden Apps wurden nicht aktualisiert: {apps}",
|
||||||
|
"app_make_default_location_already_used": "Die App \"{app}\" kann nicht als Standard für die Domain \"{domain}\" festgelegt werden. Sie wird bereits von der anderen App \"{other_app}\" verwendet",
|
||||||
|
"aborting": "Breche ab.",
|
||||||
|
"app_action_cannot_be_ran_because_required_services_down": "Diese App erfordert einige Dienste, die derzeit nicht verfügbar sind. Bevor Sie fortfahren, sollten Sie versuchen, die folgenden Dienste neu zu starten (und möglicherweise untersuchen, warum sie nicht verfügbar sind): {services}",
|
||||||
|
"already_up_to_date": "Nichts zu tun! Alles ist bereits auf dem neusten Stand!",
|
||||||
|
"admin_password_too_long": "Bitte ein Passwort kürzer als 127 Zeichen wählen."
|
||||||
}
|
}
|
||||||
|
|
731
locales/en.json
731
locales/en.json
|
@ -2,66 +2,68 @@
|
||||||
"aborting": "Aborting.",
|
"aborting": "Aborting.",
|
||||||
"action_invalid": "Invalid action '{action:s}'",
|
"action_invalid": "Invalid action '{action:s}'",
|
||||||
"admin_password": "Administration password",
|
"admin_password": "Administration password",
|
||||||
"admin_password_change_failed": "Unable to change password",
|
"admin_password_change_failed": "Cannot change password",
|
||||||
"admin_password_changed": "The administration password has been changed",
|
"admin_password_changed": "The administration password got changed",
|
||||||
"admin_password_too_long": "Please choose a password shorter than 127 characters",
|
"admin_password_too_long": "Please choose a password shorter than 127 characters",
|
||||||
"already_up_to_date": "Nothing to do! Everything is already up to date!",
|
"already_up_to_date": "Nothing to do. Everything is already up-to-date.",
|
||||||
"app_action_cannot_be_ran_because_required_services_down": "This app requires some services which are currently down. Before continuing, you should try to restart the following services (and possibly investigate why they are down) : {services}",
|
"app_action_cannot_be_ran_because_required_services_down": "This app requires some services which are currently down. Before continuing, you should try to restart the following services (and possibly investigate why they are down): {services}",
|
||||||
|
"app_action_broke_system": "This action seem to have broke these important services: {services}",
|
||||||
"app_already_installed": "{app:s} is already installed",
|
"app_already_installed": "{app:s} is already installed",
|
||||||
"app_already_installed_cant_change_url": "This app is already installed. The url cannot be changed just by this function. Look into `app changeurl` if it's available.",
|
"app_already_installed_cant_change_url": "This app is already installed. The URL cannot be changed just by this function. Look into `app changeurl` if it's available.",
|
||||||
"app_already_up_to_date": "{app:s} is already up to date",
|
"app_already_up_to_date": "{app:s} is already up-to-date",
|
||||||
"app_argument_choice_invalid": "Invalid choice for argument '{name:s}', it must be one of {choices:s}",
|
"app_argument_choice_invalid": "Use one of these choices '{choices:s}' for the argument '{name:s}'",
|
||||||
"app_argument_invalid": "Invalid value for argument '{name:s}': {error:s}",
|
"app_argument_invalid": "Pick a valid value for the argument '{name:s}': {error:s}",
|
||||||
"app_argument_required": "Argument '{name:s}' is required",
|
"app_argument_required": "Argument '{name:s}' is required",
|
||||||
"app_change_no_change_url_script": "The application {app_name:s} doesn't support changing it's URL yet, you might need to upgrade it.",
|
"app_change_no_change_url_script": "The application {app_name:s} doesn't support changing its URL yet, you might need to upgrade it.",
|
||||||
"app_change_url_failed_nginx_reload": "Failed to reload nginx. Here is the output of 'nginx -t':\n{nginx_errors:s}",
|
"app_change_url_failed_nginx_reload": "Could not reload NGINX. Here is the output of 'nginx -t':\n{nginx_errors:s}",
|
||||||
"app_change_url_identical_domains": "The old and new domain/url_path are identical ('{domain:s}{path:s}'), nothing to do.",
|
"app_change_url_identical_domains": "The old and new domain/url_path are identical ('{domain:s}{path:s}'), nothing to do.",
|
||||||
"app_change_url_no_script": "This application '{app_name:s}' doesn't support url modification yet. Maybe you should upgrade the application.",
|
"app_change_url_no_script": "This application '{app_name:s}' doesn't support URL modification yet. Maybe you should upgrade it.",
|
||||||
"app_change_url_success": "Successfully changed {app:s} url to {domain:s}{path:s}",
|
"app_change_url_success": "{app:s} URL is now {domain:s}{path:s}",
|
||||||
"app_extraction_failed": "Unable to extract installation files",
|
"app_extraction_failed": "Could not extract the installation files",
|
||||||
"app_id_invalid": "Invalid app id",
|
"app_id_invalid": "Invalid app ID",
|
||||||
"app_incompatible": "The app {app} is incompatible with your YunoHost version",
|
"app_incompatible": "The app {app} is incompatible with your YunoHost version",
|
||||||
"app_install_files_invalid": "Invalid installation files",
|
"app_install_files_invalid": "These files cannot be installed",
|
||||||
"app_location_already_used": "The app '{app}' is already installed on that location ({path})",
|
"app_location_already_used": "The app '{app}' is already installed in ({path})",
|
||||||
"app_make_default_location_already_used": "Can't make the app '{app}' the default on the domain {domain} is already used by the other app '{other_app}'",
|
"app_make_default_location_already_used": "Can't make the app '{app}' the default on the domain, {domain} is already in use by the other app '{other_app}'",
|
||||||
"app_location_install_failed": "Unable to install the app in this location because it conflit with the app '{other_app}' already installed on '{other_path}'",
|
"app_location_install_failed": "Cannot install the app there because it conflicts with the app '{other_app}' already installed in '{other_path}'",
|
||||||
"app_location_unavailable": "This url is not available or conflicts with the already installed app(s):\n{apps:s}",
|
"app_location_unavailable": "This URL is either unavailable, or conflicts with the already installed app(s):\n{apps:s}",
|
||||||
"app_manifest_invalid": "Invalid app manifest: {error}",
|
"app_manifest_invalid": "Something is wrong with the app manifest: {error}",
|
||||||
"app_no_upgrade": "No apps to upgrade",
|
"app_no_upgrade": "All applications are already up-to-date",
|
||||||
"app_not_upgraded": "The following apps were not upgraded: {apps}",
|
"app_not_upgraded": "The app '{failed_app}' failed to upgrade, and as a consequence the following apps upgrades have been cancelled: {apps}",
|
||||||
|
"app_upgrade_stopped": "The upgrade of all applications has been stopped to prevent possible damage because the previous application failed to upgrade",
|
||||||
"app_not_correctly_installed": "{app:s} seems to be incorrectly installed",
|
"app_not_correctly_installed": "{app:s} seems to be incorrectly installed",
|
||||||
"app_not_installed": "The application '{app:s}' is not installed. Here is the list of all installed apps: {all_apps}",
|
"app_not_installed": "Could not find the application '{app:s}' in the list of installed apps: {all_apps}",
|
||||||
"app_not_properly_removed": "{app:s} has not been properly removed",
|
"app_not_properly_removed": "{app:s} has not been properly removed",
|
||||||
"app_package_need_update": "The app {app} package needs to be updated to follow YunoHost changes",
|
"app_package_need_update": "The app {app} package needs to be updated to follow YunoHost changes",
|
||||||
"app_removed": "{app:s} has been removed",
|
"app_removed": "{app:s} removed",
|
||||||
"app_requirements_checking": "Checking required packages for {app}…",
|
"app_requirements_checking": "Checking required packages for {app}…",
|
||||||
"app_requirements_failed": "Unable to meet requirements for {app}: {error}",
|
"app_requirements_failed": "Some requirements are not met for {app}: {error}",
|
||||||
"app_requirements_unmeet": "Requirements are not met for {app}, the package {pkgname} ({version}) must be {spec}",
|
"app_requirements_unmeet": "Requirements are not met for {app}, the package {pkgname} ({version}) must be {spec}",
|
||||||
"app_sources_fetch_failed": "Unable to fetch sources files, is the url correct?",
|
"app_sources_fetch_failed": "Could not fetch sources files, is the URL correct?",
|
||||||
"app_start_install": "Installing application {app}…",
|
"app_start_install": "Installing application {app}…",
|
||||||
"app_start_remove": "Removing application {app}…",
|
"app_start_remove": "Removing application {app}…",
|
||||||
"app_start_backup": "Collecting files to be backuped for {app}…",
|
"app_start_backup": "Collecting files to be backed up for {app}…",
|
||||||
"app_start_restore": "Restoring application {app}…",
|
"app_start_restore": "Restoring application {app}…",
|
||||||
"app_unknown": "Unknown app",
|
"app_unknown": "Unknown app",
|
||||||
"app_unsupported_remote_type": "Unsupported remote type used for the app",
|
"app_unsupported_remote_type": "Unsupported remote type used for the app",
|
||||||
"app_upgrade_several_apps": "The following apps will be upgraded : {apps}",
|
"app_upgrade_several_apps": "The following apps will be upgraded: {apps}",
|
||||||
"app_upgrade_app_name": "Now upgrading app {app}…",
|
"app_upgrade_app_name": "Now upgrading {app}…",
|
||||||
"app_upgrade_failed": "Unable to upgrade {app:s}",
|
"app_upgrade_failed": "Could not upgrade {app:s}",
|
||||||
"app_upgrade_some_app_failed": "Unable to upgrade some applications",
|
"app_upgrade_some_app_failed": "Some applications could not be upgraded",
|
||||||
"app_upgraded": "{app:s} has been upgraded",
|
"app_upgraded": "{app:s} upgraded",
|
||||||
"apps_permission_not_found": "No permission found for the installed apps",
|
"apps_permission_not_found": "No permission found for the installed apps",
|
||||||
"appslist_corrupted_json": "Could not load the application lists. It looks like {filename:s} is corrupted.",
|
"appslist_corrupted_json": "Could not load the application lists. It looks like {filename:s} is damaged.",
|
||||||
"appslist_could_not_migrate": "Could not migrate app list {appslist:s}! Unable to parse the url… The old cron job has been kept in {bkp_file:s}.",
|
"appslist_could_not_migrate": "Could not migrate the app list {appslist:s}! Could not parse the URL… The old cron job was kept kept in {bkp_file:s}.",
|
||||||
"appslist_fetched": "The application list {appslist:s} has been fetched",
|
"appslist_fetched": "Updated application list {appslist:s}",
|
||||||
"appslist_migrating": "Migrating application list {appslist:s}…",
|
"appslist_migrating": "Migrating application list {appslist:s}…",
|
||||||
"appslist_name_already_tracked": "There is already a registered application list with name {name:s}.",
|
"appslist_name_already_tracked": "A registered application list with name {name:s} already exists.",
|
||||||
"appslist_removed": "The application list {appslist:s} has been removed",
|
"appslist_removed": "{appslist:s} application list removed",
|
||||||
"appslist_retrieve_bad_format": "Retrieved file for application list {appslist:s} is not valid",
|
"appslist_retrieve_bad_format": "Could not read the fetched application list {appslist:s}",
|
||||||
"appslist_retrieve_error": "Unable to retrieve the remote application list {appslist:s}: {error:s}",
|
"appslist_retrieve_error": "Cannot retrieve the remote application list {appslist:s}: {error:s}",
|
||||||
"appslist_unknown": "Application list {appslist:s} unknown.",
|
"appslist_unknown": "Application list {appslist:s} unknown.",
|
||||||
"appslist_url_already_tracked": "There is already a registered application list with url {url:s}.",
|
"appslist_url_already_tracked": "There is already a registered application list with the URL {url:s}.",
|
||||||
"ask_current_admin_password": "Current administration password",
|
"ask_current_admin_password": "Current administration password",
|
||||||
"ask_email": "Email address",
|
"ask_email": "E-mail address",
|
||||||
"ask_firstname": "First name",
|
"ask_firstname": "First name",
|
||||||
"ask_lastname": "Last name",
|
"ask_lastname": "Last name",
|
||||||
"ask_list_to_remove": "List to remove",
|
"ask_list_to_remove": "List to remove",
|
||||||
|
@ -71,109 +73,109 @@
|
||||||
"ask_new_path": "New path",
|
"ask_new_path": "New path",
|
||||||
"ask_password": "Password",
|
"ask_password": "Password",
|
||||||
"ask_path": "Path",
|
"ask_path": "Path",
|
||||||
"backup_abstract_method": "This backup method hasn't yet been implemented",
|
"backup_abstract_method": "This backup method has yet to be implemented",
|
||||||
"backup_action_required": "You must specify something to save",
|
"backup_action_required": "You must specify something to save",
|
||||||
"backup_actually_backuping": "Now creating a backup archive from the files collected…",
|
"backup_actually_backuping": "Creating a backup archive from the collected files…",
|
||||||
"backup_app_failed": "Unable to back up the app '{app:s}'",
|
"backup_app_failed": "Could not back up the app '{app:s}'",
|
||||||
"backup_applying_method_borg": "Sending all files to backup into borg-backup repository…",
|
"backup_applying_method_borg": "Sending all files to backup into borg-backup repository…",
|
||||||
"backup_applying_method_copy": "Copying all files to backup…",
|
"backup_applying_method_copy": "Copying all files to backup…",
|
||||||
"backup_applying_method_custom": "Calling the custom backup method '{method:s}'…",
|
"backup_applying_method_custom": "Calling the custom backup method '{method:s}'…",
|
||||||
"backup_applying_method_tar": "Creating the backup tar archive…",
|
"backup_applying_method_tar": "Creating the backup TAR archive…",
|
||||||
"backup_archive_app_not_found": "App '{app:s}' not found in the backup archive",
|
"backup_archive_app_not_found": "Could not find the app '{app:s}' in the backup archive",
|
||||||
"backup_archive_broken_link": "Unable to access backup archive (broken link to {path:s})",
|
"backup_archive_broken_link": "Could not access the backup archive (broken link to {path:s})",
|
||||||
"backup_archive_mount_failed": "Mounting the backup archive failed",
|
"backup_archive_mount_failed": "Could not mount the backup archive",
|
||||||
"backup_archive_name_exists": "The backup's archive name already exists",
|
"backup_archive_name_exists": "A backup archive with this name already exists.",
|
||||||
"backup_archive_name_unknown": "Unknown local backup archive named '{name:s}'",
|
"backup_archive_name_unknown": "Unknown local backup archive named '{name:s}'",
|
||||||
"backup_archive_open_failed": "Unable to open the backup archive",
|
"backup_archive_open_failed": "Could not open the backup archive",
|
||||||
"backup_archive_system_part_not_available": "System part '{part:s}' not available in this backup",
|
"backup_archive_system_part_not_available": "System part '{part:s}' unavailable in this backup",
|
||||||
"backup_archive_writing_error": "Unable to add files '{source:s}' (named in the archive: '{dest:s}') to backup into the compressed archive '{archive:s}'",
|
"backup_archive_writing_error": "Could not add the files '{source:s}' (named in the archive '{dest:s}') to be backed up into the compressed archive '{archive:s}'",
|
||||||
"backup_ask_for_copying_if_needed": "Some files couldn't be prepared to be backuped using the method that avoid to temporarily waste space on the system. To perform the backup, {size:s}MB should be used temporarily. Do you agree?",
|
"backup_ask_for_copying_if_needed": "Some files could not be prepared for backup using the method that avoids temporarily wasting space on the system. To perform the backup, {size:s}MB will be temporarily. Do you agree?",
|
||||||
"backup_borg_not_implemented": "Borg backup method is not yet implemented",
|
"backup_borg_not_implemented": "The Borg backup method is not yet implemented",
|
||||||
"backup_cant_mount_uncompress_archive": "Unable to mount in readonly mode the uncompress archive directory",
|
"backup_cant_mount_uncompress_archive": "Could not mount the uncompressed archive as write protected",
|
||||||
"backup_cleaning_failed": "Unable to clean-up the temporary backup directory",
|
"backup_cleaning_failed": "Could not clean-up the temporary backup folder",
|
||||||
"backup_copying_to_organize_the_archive": "Copying {size:s}MB to organize the archive",
|
"backup_copying_to_organize_the_archive": "Copying {size:s}MB to organize the archive",
|
||||||
"backup_couldnt_bind": "Couldn't bind {src:s} to {dest:s}.",
|
"backup_couldnt_bind": "Could not bind {src:s} to {dest:s}.",
|
||||||
"backup_created": "Backup created",
|
"backup_created": "Backup created",
|
||||||
"backup_creating_archive": "Creating the backup archive…",
|
"backup_creating_archive": "Creating the backup archive…",
|
||||||
"backup_creation_failed": "Backup creation failed",
|
"backup_creation_failed": "Could not create the backup archive",
|
||||||
"backup_csv_addition_failed": "Unable to add files to backup into the CSV file",
|
"backup_csv_addition_failed": "Could not add files to backup into the CSV file",
|
||||||
"backup_csv_creation_failed": "Unable to create the CSV file needed for future restore operations",
|
"backup_csv_creation_failed": "Could not create the CSV file needed for restoration",
|
||||||
"backup_custom_backup_error": "Custom backup method failure on 'backup' step",
|
"backup_custom_backup_error": "Custom backup method could not get past the 'backup' step",
|
||||||
"backup_custom_mount_error": "Custom backup method failure on 'mount' step",
|
"backup_custom_mount_error": "Custom backup method could not get past the 'mount' step",
|
||||||
"backup_custom_need_mount_error": "Custom backup method failure on 'need_mount' step",
|
"backup_custom_need_mount_error": "Custom backup method could not get past 'need_mount' step",
|
||||||
"backup_delete_error": "Unable to delete '{path:s}'",
|
"backup_delete_error": "Could not delete '{path:s}'",
|
||||||
"backup_deleted": "The backup has been deleted",
|
"backup_deleted": "Backup deleted",
|
||||||
"backup_extracting_archive": "Extracting the backup archive…",
|
"backup_extracting_archive": "Extracting backup archive…",
|
||||||
"backup_hook_unknown": "Backup hook '{hook:s}' unknown",
|
"backup_hook_unknown": "The backup hook '{hook:s}' is unknown",
|
||||||
"backup_invalid_archive": "Invalid backup archive",
|
"backup_invalid_archive": "This is not a backup archive",
|
||||||
"backup_method_borg_finished": "Backup into borg finished",
|
"backup_method_borg_finished": "Backup into Borg finished",
|
||||||
"backup_method_copy_finished": "Backup copy finished",
|
"backup_method_copy_finished": "Backup copy finalized",
|
||||||
"backup_method_custom_finished": "Custom backup method '{method:s}' finished",
|
"backup_method_custom_finished": "Custom backup method '{method:s}' finished",
|
||||||
"backup_method_tar_finished": "Backup tar archive created",
|
"backup_method_tar_finished": "TAR backup archive created",
|
||||||
"backup_mount_archive_for_restore": "Preparing archive for restoration…",
|
"backup_mount_archive_for_restore": "Preparing archive for restoration…",
|
||||||
"backup_no_uncompress_archive_dir": "Uncompress archive directory doesn't exist",
|
"backup_no_uncompress_archive_dir": "There is no such uncompressed archive directory",
|
||||||
"backup_nothings_done": "There is nothing to save",
|
"backup_nothings_done": "Nothing to save",
|
||||||
"backup_output_directory_forbidden": "Forbidden output directory. Backups can't be created in /bin, /boot, /dev, /etc, /lib, /root, /run, /sbin, /sys, /usr, /var or /home/yunohost.backup/archives sub-folders",
|
"backup_output_directory_forbidden": "Pick a different output directory. Backups can not be created in /bin, /boot, /dev, /etc, /lib, /root, /run, /sbin, /sys, /usr, /var or /home/yunohost.backup/archives sub-folders",
|
||||||
"backup_output_directory_not_empty": "The output directory is not empty",
|
"backup_output_directory_not_empty": "You should pick an empty output directory",
|
||||||
"backup_output_directory_required": "You must provide an output directory for the backup",
|
"backup_output_directory_required": "You must provide an output directory for the backup",
|
||||||
"backup_output_symlink_dir_broken": "You have a broken symlink instead of your archives directory '{path:s}'. You may have a specific setup to backup your data on an other filesystem, in this case you probably forgot to remount or plug your hard dirve or usb key.",
|
"backup_output_symlink_dir_broken": "You have a broken symlink in place of your archive directory '{path:s}'. You may have a specific setup to backup your data on another filesystem, in this case you probably forgot to remount or plug in your hard-drive or USB key.",
|
||||||
"backup_permission": "Backup permission for app {app:s}",
|
"backup_permission": "Backup permission for app {app:s}",
|
||||||
"backup_php5_to_php7_migration_may_fail": "Could not convert your archive to support php7, your php apps may fail to restore (reason: {error:s})",
|
"backup_php5_to_php7_migration_may_fail": "Could not convert your archive to support PHP 7, you may be unable to restore your PHP apps (reason: {error:s})",
|
||||||
"backup_running_hooks": "Running backup hooks…",
|
"backup_running_hooks": "Running backup hooks…",
|
||||||
"backup_system_part_failed": "Unable to backup the '{part:s}' system part",
|
"backup_system_part_failed": "Could not backup the '{part:s}' system part",
|
||||||
"backup_unable_to_organize_files": "Unable to organize files in the archive with the quick method",
|
"backup_unable_to_organize_files": "Could not use the quick method to organize files in the archive",
|
||||||
"backup_with_no_backup_script_for_app": "App {app:s} has no backup script. Ignoring.",
|
"backup_with_no_backup_script_for_app": "The app '{app:s}' has no backup script. Ignoring.",
|
||||||
"backup_with_no_restore_script_for_app": "App {app:s} has no restore script, you won't be able to automatically restore the backup of this app.",
|
"backup_with_no_restore_script_for_app": "The '{app:s}' has no restoration script, you will not be able to automatically restore the backup of this app.",
|
||||||
"certmanager_acme_not_configured_for_domain": "Certificate for domain {domain:s} does not appear to be correctly installed. Please run cert-install for this domain first.",
|
"certmanager_acme_not_configured_for_domain": "Certificate for the domain '{domain:s}' does not appear to be correctly installed. Please run 'cert-install' for this domain first.",
|
||||||
"certmanager_attempt_to_renew_nonLE_cert": "The certificate for domain {domain:s} is not issued by Let's Encrypt. Cannot renew it automatically!",
|
"certmanager_attempt_to_renew_nonLE_cert": "The certificate for the domain '{domain:s}' is not issued by Let's Encrypt. Cannot renew it automatically!",
|
||||||
"certmanager_attempt_to_renew_valid_cert": "The certificate for domain {domain:s} is not about to expire! (You may use --force if you know what you're doing)",
|
"certmanager_attempt_to_renew_valid_cert": "The certificate for the domain '{domain:s}' is not about to expire! (You may use --force if you know what you're doing)",
|
||||||
"certmanager_attempt_to_replace_valid_cert": "You are attempting to overwrite a good and valid certificate for domain {domain:s}! (Use --force to bypass)",
|
"certmanager_attempt_to_replace_valid_cert": "You are attempting to overwrite a good and valid certificate for domain {domain:s}! (Use --force to bypass)",
|
||||||
"certmanager_cannot_read_cert": "Something wrong happened when trying to open current certificate for domain {domain:s} (file: {file:s}), reason: {reason:s}",
|
"certmanager_cannot_read_cert": "Something wrong happened when trying to open current certificate for domain {domain:s} (file: {file:s}), reason: {reason:s}",
|
||||||
"certmanager_cert_install_success": "Successfully installed Let's Encrypt certificate for domain {domain:s}!",
|
"certmanager_cert_install_success": "Let's Encrypt certificate now installed for the domain '{domain:s}'",
|
||||||
"certmanager_cert_install_success_selfsigned": "Successfully installed a self-signed certificate for domain {domain:s}!",
|
"certmanager_cert_install_success_selfsigned": "Self-signed certificate now installed for the domain '{domain:s}'",
|
||||||
"certmanager_cert_renew_success": "Successfully renewed Let's Encrypt certificate for domain {domain:s}!",
|
"certmanager_cert_renew_success": "Let's Encrypt certificate renewed for the domain '{domain:s}'",
|
||||||
"certmanager_cert_signing_failed": "Signing the new certificate failed",
|
"certmanager_cert_signing_failed": "Could not sign the new certificate",
|
||||||
"certmanager_certificate_fetching_or_enabling_failed": "Sounds like enabling the new certificate for {domain:s} failed somehow…",
|
"certmanager_certificate_fetching_or_enabling_failed": "Trying to use the new certificate for {domain:s} did not work…",
|
||||||
"certmanager_conflicting_nginx_file": "Unable to prepare domain for ACME challenge: the nginx configuration file {filepath:s} is conflicting and should be removed first",
|
"certmanager_conflicting_nginx_file": "Could not prepare domain for ACME challenge: the NGINX configuration file {filepath:s} is conflicting and should be removed first",
|
||||||
"certmanager_couldnt_fetch_intermediate_cert": "Timed out when trying to fetch intermediate certificate from Let's Encrypt. Certificate installation/renewal aborted - please try again later.",
|
"certmanager_couldnt_fetch_intermediate_cert": "Timed out when trying to fetch intermediate certificate from Let's Encrypt. Certificate installation/renewal aborted—please try again later.",
|
||||||
"certmanager_domain_cert_not_selfsigned": "The certificate for domain {domain:s} is not self-signed. Are you sure you want to replace it? (Use --force)",
|
"certmanager_domain_cert_not_selfsigned": "The certificate for domain {domain:s} is not self-signed. Are you sure you want to replace it? (Use '--force' to do so.)",
|
||||||
"certmanager_domain_dns_ip_differs_from_public_ip": "The DNS 'A' record for domain {domain:s} is different from this server IP. If you recently modified your A record, please wait for it to propagate (some DNS propagation checkers are available online). (If you know what you are doing, use --no-checks to disable those checks.)",
|
"certmanager_domain_dns_ip_differs_from_public_ip": "The DNS 'A' record for the domain '{domain:s}' is different from this server IP. If you recently modified your A record, please wait for it to propagate (some DNS propagation checkers are available online). (If you know what you are doing, use '--no-checks' to turn off those checks.)",
|
||||||
"certmanager_domain_http_not_working": "It seems that the domain {domain:s} cannot be accessed through HTTP. Please check your DNS and nginx configuration is okay",
|
"certmanager_domain_http_not_working": "It seems the domain {domain:s} cannot be accessed through HTTP. Check that your DNS and NGINX configuration is correct",
|
||||||
"certmanager_domain_not_resolved_locally": "The domain {domain:s} cannot be resolved from inside your Yunohost server. This might happen if you recently modified your DNS record. If so, please wait a few hours for it to propagate. If the issue persists, consider adding {domain:s} to /etc/hosts. (If you know what you are doing, use --no-checks to disable those checks.)",
|
"certmanager_domain_not_resolved_locally": "The domain {domain:s} cannot be resolved from inside your YunoHost server. This might happen if you recently modified your DNS record. If so, please wait a few hours for it to propagate. If the issue persists, consider adding {domain:s} to /etc/hosts. (If you know what you are doing, use '--no-checks' to turn off those checks.)",
|
||||||
"certmanager_domain_unknown": "Unknown domain {domain:s}",
|
"certmanager_domain_unknown": "Unknown domain '{domain:s}'",
|
||||||
"certmanager_error_no_A_record": "No DNS 'A' record found for {domain:s}. You need to make your domain name point to your machine to be able to install a Let's Encrypt certificate! (If you know what you are doing, use --no-checks to disable those checks.)",
|
"certmanager_error_no_A_record": "No DNS 'A' record found for '{domain:s}'. You need to make your domain name point to your machine to be able to install a Let's Encrypt certificate. (If you know what you are doing, use '--no-checks' to turn off those checks.)",
|
||||||
"certmanager_hit_rate_limit": "Too many certificates already issued for exact set of domains {domain:s} recently. Please try again later. See https://letsencrypt.org/docs/rate-limits/ for more details",
|
"certmanager_hit_rate_limit": "Too many certificates already issued for this exact set of domains {domain:s} recently. Please try again later. See https://letsencrypt.org/docs/rate-limits/ for more details",
|
||||||
"certmanager_http_check_timeout": "Timed out when server tried to contact itself through HTTP using public IP address (domain {domain:s} with ip {ip:s}). You may be experiencing hairpinning issue or the firewall/router ahead of your server is misconfigured.",
|
"certmanager_http_check_timeout": "Timed out when server tried to contact itself through HTTP using a public IP address (domain '{domain:s}' with IP '{ip:s}'). You may be experiencing a hairpinning issue, or the firewall/router ahead of your server is misconfigured.",
|
||||||
"certmanager_no_cert_file": "Unable to read certificate file for domain {domain:s} (file: {file:s})",
|
"certmanager_no_cert_file": "Could not read the certificate file for the domain {domain:s} (file: {file:s})",
|
||||||
"certmanager_self_ca_conf_file_not_found": "Configuration file not found for self-signing authority (file: {file:s})",
|
"certmanager_self_ca_conf_file_not_found": "Could not find configuration file for self-signing authority (file: {file:s})",
|
||||||
"certmanager_unable_to_parse_self_CA_name": "Unable to parse name of self-signing authority (file: {file:s})",
|
"certmanager_unable_to_parse_self_CA_name": "Could not parse name of self-signing authority (file: {file:s})",
|
||||||
"confirm_app_install_warning": "Warning: this application may work but is not well-integrated in YunoHost. Some features such as single sign-on and backup/restore might not be available. Install anyway? [{answers:s}] ",
|
"confirm_app_install_warning": "Warning: This application may work, but is not well-integrated in YunoHost. Some features such as single sign-on and backup/restore might not be available. Install anyway? [{answers:s}] ",
|
||||||
"confirm_app_install_danger": "WARNING! This application is still experimental (if not explicitly not working) and it is likely to break your system! You should probably NOT install it unless you know what you are doing. Are you willing to take that risk? [{answers:s}] ",
|
"confirm_app_install_danger": "WARNING! This application is still experimental (if not explicitly not working) and it is likely to break your system! You should probably NOT install it unless you know what you are doing. Are you willing to take that risk? [{answers:s}] ",
|
||||||
"confirm_app_install_thirdparty": "WARNING! Installing 3rd party applications may compromise the integrity and security of your system. You should probably NOT install it unless you know what you are doing. Are you willing to take that risk? [{answers:s}] ",
|
"confirm_app_install_thirdparty": "WARNING! Installing third-party applications may compromise the integrity and security of your system. You should probably NOT install it unless you know what you are doing. Are you willing to take that risk? [{answers:s}] ",
|
||||||
"custom_app_url_required": "You must provide a URL to upgrade your custom app {app:s}",
|
"custom_app_url_required": "You must provide a URL to upgrade your custom app {app:s}",
|
||||||
"custom_appslist_name_required": "You must provide a name for your custom app list",
|
"custom_appslist_name_required": "You must provide a name for your custom app list",
|
||||||
"diagnosis_debian_version_error": "Can't retrieve the Debian version: {error}",
|
"diagnosis_debian_version_error": "Could not retrieve the Debian version: {error}",
|
||||||
"diagnosis_kernel_version_error": "Can't retrieve kernel version: {error}",
|
"diagnosis_kernel_version_error": "Could not retrieve kernel version: {error}",
|
||||||
"diagnosis_monitor_disk_error": "Can't monitor disks: {error}",
|
"diagnosis_monitor_disk_error": "Could not monitor disks: {error}",
|
||||||
"diagnosis_monitor_network_error": "Can't monitor network: {error}",
|
"diagnosis_monitor_network_error": "Could not monitor network: {error}",
|
||||||
"diagnosis_monitor_system_error": "Can't monitor system: {error}",
|
"diagnosis_monitor_system_error": "Could not monitor system: {error}",
|
||||||
"diagnosis_no_apps": "No installed application",
|
"diagnosis_no_apps": "No installed application",
|
||||||
"dpkg_is_broken": "You cannot do this right now because dpkg/apt (the system package managers) seems to be in a broken state... You can try to solve this issue by connecting through SSH and running `sudo dpkg --configure -a`.",
|
"dpkg_is_broken": "You cannot do this right now because dpkg/APT (the system package managers) seems to be in a broken state… You can try to solve this issue by connecting through SSH and running `sudo dpkg --configure -a`.",
|
||||||
"dpkg_lock_not_available": "This command can't be ran right now because another program seems to be using the lock of dpkg (the system package manager)",
|
"dpkg_lock_not_available": "This command can't be ran right now because another program seems to be using the lock of dpkg (the system package manager)",
|
||||||
"dnsmasq_isnt_installed": "dnsmasq does not seem to be installed, please run 'apt-get remove bind9 && apt-get install dnsmasq'",
|
"dnsmasq_isnt_installed": "Dnsmasq does not seem to be installed, please run 'apt-get remove bind9 && apt-get install it'",
|
||||||
"domain_cannot_remove_main": "Cannot remove main domain. Set a new main domain first",
|
"domain_cannot_remove_main": "Cannot remove main domain. Set one first",
|
||||||
"domain_cert_gen_failed": "Unable to generate certificate",
|
"domain_cert_gen_failed": "Could not generate certificate",
|
||||||
"domain_created": "The domain has been created",
|
"domain_created": "Domain created",
|
||||||
"domain_creation_failed": "Failed to create domain {domain}: {error}",
|
"domain_creation_failed": "Could not create domain {domain}: {error}",
|
||||||
"domain_deleted": "The domain has been deleted",
|
"domain_deleted": "Domain deleted",
|
||||||
"domain_deletion_failed": "Failed to delete domain {domain}: {error}",
|
"domain_deletion_failed": "Could not delete domain {domain}: {error}",
|
||||||
"domain_dns_conf_is_just_a_recommendation": "This command shows you what is the *recommended* configuration. It does not actually set up the DNS configuration for you. It is your responsability to configure your DNS zone in your registrar according to this recommendation.",
|
"domain_dns_conf_is_just_a_recommendation": "This command shows you the *recommended* configuration. It does not actually set up the DNS configuration for you. It is your responsability to configure your DNS zone in your registrar according to this recommendation.",
|
||||||
"domain_dyndns_already_subscribed": "You've already subscribed to a DynDNS domain",
|
"domain_dyndns_already_subscribed": "You have already subscribed to a DynDNS domain",
|
||||||
"domain_dyndns_dynette_is_unreachable": "Unable to reach YunoHost dynette, either your YunoHost is not correctly connected to the internet or the dynette server is down. Error: {error}",
|
"domain_dyndns_dynette_is_unreachable": "Could not reach YunoHost dynette, either your YunoHost is not correctly connected to the Internet, or the dynette server is down. Error: {error}",
|
||||||
"domain_dyndns_invalid": "Invalid domain to use with DynDNS",
|
"domain_dyndns_invalid": "This domain can not be used with DynDNS",
|
||||||
"domain_dyndns_root_unknown": "Unknown DynDNS root domain",
|
"domain_dyndns_root_unknown": "Unknown DynDNS root domain",
|
||||||
"domain_exists": "Domain already exists",
|
"domain_exists": "The domain already exists",
|
||||||
"domain_hostname_failed": "Failed to set new hostname. This might cause issue later (not sure about it... it might be fine).",
|
"domain_hostname_failed": "Could not set new hostname. This might cause an issue later (it might be fine).",
|
||||||
"domain_uninstall_app_first": "One or more apps are installed on this domain. Please uninstall them before proceeding to domain removal",
|
"domain_uninstall_app_first": "One or more apps are installed on this domain. Please uninstall them before proceeding to domain removal",
|
||||||
"domain_unknown": "Unknown domain",
|
"domain_unknown": "Unknown domain",
|
||||||
"domain_zone_exists": "DNS zone file already exists",
|
"domain_zone_exists": "DNS zone file already exists",
|
||||||
|
@ -183,87 +185,87 @@
|
||||||
"downloading": "Downloading…",
|
"downloading": "Downloading…",
|
||||||
"dyndns_could_not_check_provide": "Could not check if {provider:s} can provide {domain:s}.",
|
"dyndns_could_not_check_provide": "Could not check if {provider:s} can provide {domain:s}.",
|
||||||
"dyndns_could_not_check_available": "Could not check if {domain:s} is available on {provider:s}.",
|
"dyndns_could_not_check_available": "Could not check if {domain:s} is available on {provider:s}.",
|
||||||
"dyndns_cron_installed": "The DynDNS cron job has been installed",
|
"dyndns_cron_installed": "DynDNS cron job created",
|
||||||
"dyndns_cron_remove_failed": "Unable to remove the DynDNS cron job because: {error}",
|
"dyndns_cron_remove_failed": "Could not remove the DynDNS cron job because: {error}",
|
||||||
"dyndns_cron_removed": "The DynDNS cron job has been removed",
|
"dyndns_cron_removed": "DynDNS cron job removed",
|
||||||
"dyndns_ip_update_failed": "Unable to update IP address on DynDNS",
|
"dyndns_ip_update_failed": "Could not update IP address to DynDNS",
|
||||||
"dyndns_ip_updated": "Your IP address has been updated on DynDNS",
|
"dyndns_ip_updated": "Updated your IP on DynDNS",
|
||||||
"dyndns_key_generating": "DNS key is being generated, it may take a while…",
|
"dyndns_key_generating": "Generating DNS key… It may take a while.",
|
||||||
"dyndns_key_not_found": "DNS key not found for the domain",
|
"dyndns_key_not_found": "DNS key not found for the domain",
|
||||||
"dyndns_no_domain_registered": "No domain has been registered with DynDNS",
|
"dyndns_no_domain_registered": "No domain registered with DynDNS",
|
||||||
"dyndns_registered": "The DynDNS domain has been registered",
|
"dyndns_registered": "DynDNS domain registered",
|
||||||
"dyndns_registration_failed": "Unable to register DynDNS domain: {error:s}",
|
"dyndns_registration_failed": "Could not register DynDNS domain: {error:s}",
|
||||||
"dyndns_domain_not_provided": "Dyndns provider {provider:s} cannot provide domain {domain:s}.",
|
"dyndns_domain_not_provided": "DynDNS provider {provider:s} cannot provide domain {domain:s}.",
|
||||||
"dyndns_unavailable": "Domain {domain:s} is not available.",
|
"dyndns_unavailable": "The domain '{domain:s}' is unavailable.",
|
||||||
"executing_command": "Executing command '{command:s}'…",
|
"executing_command": "Executing command '{command:s}'…",
|
||||||
"executing_script": "Executing script '{script:s}'…",
|
"executing_script": "Executing script '{script:s}'…",
|
||||||
"extracting": "Extracting…",
|
"extracting": "Extracting…",
|
||||||
"experimental_feature": "Warning: this feature is experimental and not consider stable, you shouldn't be using it except if you know what you are doing.",
|
"experimental_feature": "Warning: This feature is experimental and not considered stable, you should not use it unless you know what you are doing.",
|
||||||
"field_invalid": "Invalid field '{:s}'",
|
"field_invalid": "Invalid field '{:s}'",
|
||||||
"file_does_not_exist": "The file {path:s} does not exists.",
|
"file_does_not_exist": "The file {path:s} does not exist.",
|
||||||
"firewall_reload_failed": "Unable to reload the firewall",
|
"firewall_reload_failed": "Could not reload the firewall",
|
||||||
"firewall_reloaded": "The firewall has been reloaded",
|
"firewall_reloaded": "Firewall reloaded",
|
||||||
"firewall_rules_cmd_failed": "Some firewall rules commands have failed. For more information, see the log.",
|
"firewall_rules_cmd_failed": "Some firewall rules commands have failed. More info in log.",
|
||||||
"format_datetime_short": "%m/%d/%Y %I:%M %p",
|
"format_datetime_short": "%m/%d/%Y %I:%M %p",
|
||||||
"global_settings_bad_choice_for_enum": "Bad choice for setting {setting:s}, received '{choice:s}' but available choices are : {available_choices:s}",
|
"global_settings_bad_choice_for_enum": "Bad choice for setting {setting:s}, received '{choice:s}', but available choices are: {available_choices:s}",
|
||||||
"global_settings_bad_type_for_setting": "Bad type for setting {setting:s}, received {received_type:s}, except {expected_type:s}",
|
"global_settings_bad_type_for_setting": "Bad type for setting {setting:s}, received {received_type:s}, expected {expected_type:s}",
|
||||||
"global_settings_cant_open_settings": "Failed to open settings file, reason: {reason:s}",
|
"global_settings_cant_open_settings": "Could not open settings file, reason: {reason:s}",
|
||||||
"global_settings_cant_serialize_settings": "Failed to serialize settings data, reason: {reason:s}",
|
"global_settings_cant_serialize_settings": "Could not serialize settings data, reason: {reason:s}",
|
||||||
"global_settings_cant_write_settings": "Failed to write settings file, reason: {reason:s}",
|
"global_settings_cant_write_settings": "Could not save settings file, reason: {reason:s}",
|
||||||
"global_settings_key_doesnt_exists": "The key '{settings_key:s}' doesn't exists in the global settings, you can see all the available keys by doing 'yunohost settings list'",
|
"global_settings_key_doesnt_exists": "The key '{settings_key:s}' does not exist in the global settings, you can see all the available keys by running 'yunohost settings list'",
|
||||||
"global_settings_reset_success": "Success. Your previous settings have been backuped in {path:s}",
|
"global_settings_reset_success": "Previous settings now backed up to {path:s}",
|
||||||
"global_settings_setting_example_bool": "Example boolean option",
|
"global_settings_setting_example_bool": "Example boolean option",
|
||||||
"global_settings_setting_example_enum": "Example enum option",
|
"global_settings_setting_example_enum": "Example enum option",
|
||||||
"global_settings_setting_example_int": "Example int option",
|
"global_settings_setting_example_int": "Example int option",
|
||||||
"global_settings_setting_example_string": "Example string option",
|
"global_settings_setting_example_string": "Example string option",
|
||||||
"global_settings_setting_security_nginx_compatibility": "Compatibility vs. security tradeoff for the web server nginx. Affects the ciphers (and other security-related aspects)",
|
"global_settings_setting_security_nginx_compatibility": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)",
|
||||||
"global_settings_setting_security_password_admin_strength": "Admin password strength",
|
"global_settings_setting_security_password_admin_strength": "Admin password strength",
|
||||||
"global_settings_setting_security_password_user_strength": "User password strength",
|
"global_settings_setting_security_password_user_strength": "User password strength",
|
||||||
"global_settings_setting_security_ssh_compatibility": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)",
|
"global_settings_setting_security_ssh_compatibility": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)",
|
||||||
"global_settings_setting_security_postfix_compatibility": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)",
|
"global_settings_setting_security_postfix_compatibility": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)",
|
||||||
"global_settings_unknown_setting_from_settings_file": "Unknown key in settings: '{setting_key:s}', discarding it and save it in /etc/yunohost/settings-unknown.json",
|
"global_settings_unknown_setting_from_settings_file": "Unknown key in settings: '{setting_key:s}', discard it and save it in /etc/yunohost/settings-unknown.json",
|
||||||
"global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration",
|
"global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration",
|
||||||
"global_settings_unknown_type": "Unexpected situation, the setting {setting:s} appears to have the type {unknown_type:s} but it's not a type supported by the system.",
|
"global_settings_unknown_type": "Unexpected situation, the setting {setting:s} appears to have the type {unknown_type:s} but it is not a type supported by the system.",
|
||||||
"good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters - though it is good practice to use longer password (i.e. a passphrase) and/or to use various kind of characters (uppercase, lowercase, digits and special characters).",
|
"good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at-least 8 characters—though it is good practice to use a longer password (i.e. a passphrase) and/or to use a variation of characters (uppercase, lowercase, digits and special characters).",
|
||||||
"good_practices_about_user_password": "You are now about to define a new user password. The password should be at least 8 characters - though it is good practice to use longer password (i.e. a passphrase) and/or to use various kind of characters (uppercase, lowercase, digits and special characters).",
|
"good_practices_about_user_password": "You are now about to define a new user password. The password should be at least 8 characters—though it is good practice to use longer password (i.e. a passphrase) and/or to a variation of characters (uppercase, lowercase, digits and special characters).",
|
||||||
"group_already_exist": "Group {group} already exist",
|
"group_already_exist": "Group {group} already exists",
|
||||||
"group_already_exist_on_system": "Group {group} already exists in the system group",
|
"group_already_exist_on_system": "Group {group} already exists in the system groups",
|
||||||
"group_created": "Group '{group}' successfully created",
|
"group_created": "Group '{group}' created",
|
||||||
"group_creation_failed": "Failed to create group {group}: {error}",
|
"group_creation_failed": "Could not create the group '{group}': {error}",
|
||||||
"group_cannot_be_edited": "The group {group} cannot be edited manually.",
|
"group_cannot_be_edited": "The group {group} cannot be edited manually.",
|
||||||
"group_cannot_be_deleted": "The group {group} cannot be deleted manually.",
|
"group_cannot_be_deleted": "The group {group} cannot be deleted manually.",
|
||||||
"group_deleted": "Group '{group}' deleted",
|
"group_deleted": "Group '{group}' deleted",
|
||||||
"group_deletion_failed": "Failed to delete group {group}: {error}",
|
"group_deletion_failed": "Could not delete the group '{group}': {error}",
|
||||||
"group_unknown": "Group {group} unknown",
|
"group_unknown": "The group '{group:s}' is unknown",
|
||||||
"group_updated": "Group '{group}' updated",
|
"group_updated": "Group '{group}' updated",
|
||||||
"group_update_failed": "Failed to update group {group}: {error}",
|
"group_update_failed": "Could not update the group '{group}': {error}",
|
||||||
"group_user_already_in_group": "User {user} is already in group {group}",
|
"group_user_already_in_group": "User {user} is already in group {group}",
|
||||||
"group_user_not_in_group": "User {user} is not in group {group}",
|
"group_user_not_in_group": "User {user} is not in group {group}",
|
||||||
"hook_exec_failed": "Script execution failed: {path:s}",
|
"hook_exec_failed": "Could not run script: {path:s}",
|
||||||
"hook_exec_not_terminated": "Script execution did not finish properly: {path:s}",
|
"hook_exec_not_terminated": "Script did not finish properly: {path:s}",
|
||||||
"hook_json_return_error": "Failed to read return from hook {path:s}. Error: {msg:s}. Raw content: {raw_content}",
|
"hook_json_return_error": "Could not read return from hook {path:s}. Error: {msg:s}. Raw content: {raw_content}",
|
||||||
"hook_list_by_invalid": "Invalid property to list hook by",
|
"hook_list_by_invalid": "This property can not be used to list hooks",
|
||||||
"hook_name_unknown": "Unknown hook name '{name:s}'",
|
"hook_name_unknown": "Unknown hook name '{name:s}'",
|
||||||
"installation_complete": "Installation complete",
|
"installation_complete": "Installation complete",
|
||||||
"installation_failed": "Installation failed",
|
"installation_failed": "Something went wrong with the installation",
|
||||||
"invalid_url_format": "Invalid URL format",
|
"invalid_url_format": "Something is wrong with the URL",
|
||||||
"ip6tables_unavailable": "You cannot play with ip6tables here. You are either in a container or your kernel does not support it",
|
"ip6tables_unavailable": "You cannot play with ip6tables here. You are either in a container or your kernel does not support it",
|
||||||
"iptables_unavailable": "You cannot play with iptables here. You are either in a container or your kernel does not support it",
|
"iptables_unavailable": "You cannot play with iptables here. You are either in a container or your kernel does not support it",
|
||||||
"log_corrupted_md_file": "The yaml metadata file associated with logs is corrupted: '{md_file}\nError: {error}'",
|
"log_corrupted_md_file": "The YAML metadata file associated with logs is damaged: '{md_file}\nError: {error}'",
|
||||||
"log_category_404": "The log category '{category}' does not exist",
|
"log_category_404": "The log category '{category}' does not exist",
|
||||||
"log_link_to_log": "Full log of this operation: '<a href=\"#/tools/logs/{name}\" style=\"text-decoration:underline\">{desc}</a>'",
|
"log_link_to_log": "Full log of this operation: '<a href=\"#/tools/logs/{name}\" style=\"text-decoration:underline\">{desc}</a>'",
|
||||||
"log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'",
|
"log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'",
|
||||||
"log_link_to_failed_log": "The operation '{desc}' has failed! To get help, please <a href=\"#/tools/logs/{name}\">provide the full log of this operation by clicking here</a>",
|
"log_link_to_failed_log": "Could not complete the operation '{desc}'. Please provide the full log of this operation by <a href=\"#/tools/logs/{name}\">clicking here</a> to get help",
|
||||||
"log_help_to_get_failed_log": "The operation '{desc}' has failed! To get help, please share the full log of this operation using the command 'yunohost log display {name} --share'",
|
"log_help_to_get_failed_log": "The operation '{desc}' could not be completed. Please share the full log of this operation using the command 'yunohost log display {name} --share' to get help",
|
||||||
"log_does_exists": "There is not operation log with the name '{log}', use 'yunohost log list to see all available operation logs'",
|
"log_does_exists": "There is not operation log with the name '{log}', use 'yunohost log list' to see all available operation logs",
|
||||||
"log_operation_unit_unclosed_properly": "Operation unit has not been closed properly",
|
"log_operation_unit_unclosed_properly": "Operation unit has not been closed properly",
|
||||||
"log_app_fetchlist": "Add an application list",
|
"log_app_fetchlist": "Add an application list",
|
||||||
"log_app_removelist": "Remove an application list",
|
"log_app_removelist": "Remove an application list",
|
||||||
"log_app_change_url": "Change the url of '{}' application",
|
"log_app_change_url": "Change the URL of '{}' application",
|
||||||
"log_app_install": "Install '{}' application",
|
"log_app_install": "Install the '{}' application",
|
||||||
"log_app_remove": "Remove '{}' application",
|
"log_app_remove": "Remove the '{}' application",
|
||||||
"log_app_upgrade": "Upgrade '{}' application",
|
"log_app_upgrade": "Upgrade the '{}' application",
|
||||||
"log_app_makedefault": "Make '{}' as default application",
|
"log_app_makedefault": "Make '{}' the default application",
|
||||||
"log_available_on_yunopaste": "This log is now available via {url}",
|
"log_available_on_yunopaste": "This log is now available via {url}",
|
||||||
"log_backup_restore_system": "Restore system from a backup archive",
|
"log_backup_restore_system": "Restore system from a backup archive",
|
||||||
"log_backup_restore_app": "Restore '{}' from a backup archive",
|
"log_backup_restore_app": "Restore '{}' from a backup archive",
|
||||||
|
@ -272,8 +274,8 @@
|
||||||
"log_domain_add": "Add '{}' domain into system configuration",
|
"log_domain_add": "Add '{}' domain into system configuration",
|
||||||
"log_domain_remove": "Remove '{}' domain from system configuration",
|
"log_domain_remove": "Remove '{}' domain from system configuration",
|
||||||
"log_dyndns_subscribe": "Subscribe to a YunoHost subdomain '{}'",
|
"log_dyndns_subscribe": "Subscribe to a YunoHost subdomain '{}'",
|
||||||
"log_dyndns_update": "Update the ip associated with your YunoHost subdomain '{}'",
|
"log_dyndns_update": "Update the IP associated with your YunoHost subdomain '{}'",
|
||||||
"log_letsencrypt_cert_install": "Install Let's encrypt certificate on '{}' domain",
|
"log_letsencrypt_cert_install": "Install a Let's encrypt certificate on '{}' domain",
|
||||||
"log_permission_create": "Create permission '{}'",
|
"log_permission_create": "Create permission '{}'",
|
||||||
"log_permission_delete": "Delete permission '{}'",
|
"log_permission_delete": "Delete permission '{}'",
|
||||||
"log_permission_urls": "Update urls related to permission '{}'",
|
"log_permission_urls": "Update urls related to permission '{}'",
|
||||||
|
@ -285,105 +287,105 @@
|
||||||
"log_user_group_create": "Create '{}' group",
|
"log_user_group_create": "Create '{}' group",
|
||||||
"log_user_group_delete": "Delete '{}' group",
|
"log_user_group_delete": "Delete '{}' group",
|
||||||
"log_user_group_update": "Update '{}' group",
|
"log_user_group_update": "Update '{}' group",
|
||||||
"log_user_update": "Update information of '{}' user",
|
"log_user_update": "Update user info of '{}'",
|
||||||
"log_user_permission_update": "Update accesses for permission '{}'",
|
"log_user_permission_update": "Update accesses for permission '{}'",
|
||||||
"log_user_permission_reset": "Reset permission '{}'",
|
"log_user_permission_reset": "Reset permission '{}'",
|
||||||
"log_tools_maindomain": "Make '{}' as main domain",
|
"log_tools_maindomain": "Make '{}' the main domain",
|
||||||
"log_tools_migrations_migrate_forward": "Migrate forward",
|
"log_tools_migrations_migrate_forward": "Migrate forward",
|
||||||
"log_tools_postinstall": "Postinstall your YunoHost server",
|
"log_tools_postinstall": "Postinstall your YunoHost server",
|
||||||
"log_tools_upgrade": "Upgrade system packages",
|
"log_tools_upgrade": "Upgrade system packages",
|
||||||
"log_tools_shutdown": "Shutdown your server",
|
"log_tools_shutdown": "Shutdown your server",
|
||||||
"log_tools_reboot": "Reboot your server",
|
"log_tools_reboot": "Reboot your server",
|
||||||
"ldap_init_failed_to_create_admin": "LDAP initialization failed to create admin user",
|
"ldap_init_failed_to_create_admin": "LDAP initialization could not create admin user",
|
||||||
"ldap_initialized": "LDAP has been initialized",
|
"ldap_initialized": "LDAP initialized",
|
||||||
"license_undefined": "undefined",
|
"license_undefined": "undefined",
|
||||||
"mail_alias_remove_failed": "Unable to remove mail alias '{mail:s}'",
|
"mail_alias_remove_failed": "Could not remove e-mail alias '{mail:s}'",
|
||||||
"mail_domain_unknown": "Unknown mail address domain '{domain:s}'",
|
"mail_domain_unknown": "Unknown e-mail address for domain '{domain:s}'",
|
||||||
"mail_forward_remove_failed": "Unable to remove mail forward '{mail:s}'",
|
"mail_forward_remove_failed": "Could not remove e-mail forwarding '{mail:s}'",
|
||||||
"mailbox_disabled": "Mailbox disabled for user {user:s}",
|
"mailbox_disabled": "E-mail turned off for user {user:s}",
|
||||||
"mailbox_used_space_dovecot_down": "Dovecot mailbox service need to be up, if you want to get mailbox used space",
|
"mailbox_used_space_dovecot_down": "The Dovecot mailbox service needs to be up, if you want to fetch used mailbox space",
|
||||||
"mail_unavailable": "This email address is reserved and shall be automatically allocated to the very first user",
|
"mail_unavailable": "This e-mail address is reserved and shall be automatically allocated to the very first user",
|
||||||
"maindomain_change_failed": "Unable to change the main domain",
|
"maindomain_change_failed": "Could not change the main domain",
|
||||||
"maindomain_changed": "The main domain has been changed",
|
"maindomain_changed": "The main domain now changed",
|
||||||
"migrate_tsig_end": "Migration to hmac-sha512 finished",
|
"migrate_tsig_end": "Migration to HMAC-SHA-512 finished",
|
||||||
"migrate_tsig_failed": "Migrating the dyndns domain {domain} to hmac-sha512 failed, rolling back. Error: {error_code} - {error}",
|
"migrate_tsig_failed": "Could not migrate the DynDNS domain '{domain}' to HMAC-SHA-512, rolling back. Error: {error_code}, {error}",
|
||||||
"migrate_tsig_start": "Not secure enough key algorithm detected for TSIG signature of domain '{domain}', initiating migration to the more secure one hmac-sha512",
|
"migrate_tsig_start": "Insufficiently secure key algorithm detected for TSIG signature of the domain '{domain}', initiating migration to the more secure HMAC-SHA-512",
|
||||||
"migrate_tsig_wait": "Let's wait 3min for the dyndns server to take the new key into account…",
|
"migrate_tsig_wait": "Waiting three minutes for the DynDNS server to take the new key into account…",
|
||||||
"migrate_tsig_wait_2": "2min…",
|
"migrate_tsig_wait_2": "2min…",
|
||||||
"migrate_tsig_wait_3": "1min…",
|
"migrate_tsig_wait_3": "1min…",
|
||||||
"migrate_tsig_wait_4": "30 secondes…",
|
"migrate_tsig_wait_4": "30 seconds…",
|
||||||
"migrate_tsig_not_needed": "You do not appear to use a dyndns domain, so no migration is needed!",
|
"migrate_tsig_not_needed": "You do not appear to use a DynDNS domain, so no migration is needed.",
|
||||||
"migration_description_0001_change_cert_group_to_sslcert": "Change certificates group permissions from 'metronome' to 'ssl-cert'",
|
"migration_description_0001_change_cert_group_to_sslcert": "Change certificates group permissions from 'metronome' to 'ssl-cert'",
|
||||||
"migration_description_0002_migrate_to_tsig_sha256": "Improve security of dyndns TSIG by using SHA512 instead of MD5",
|
"migration_description_0002_migrate_to_tsig_sha256": "Improve security of DynDNS TSIG updates by using SHA-512 instead of MD5",
|
||||||
"migration_description_0003_migrate_to_stretch": "Upgrade the system to Debian Stretch and YunoHost 3.0",
|
"migration_description_0003_migrate_to_stretch": "Upgrade the system to Debian Stretch and YunoHost 3.0",
|
||||||
"migration_description_0004_php5_to_php7_pools": "Reconfigure the PHP pools to use PHP 7 instead of 5",
|
"migration_description_0004_php5_to_php7_pools": "Reconfigure the PHP pools to use PHP 7 instead of 5",
|
||||||
"migration_description_0005_postgresql_9p4_to_9p6": "Migrate databases from postgresql 9.4 to 9.6",
|
"migration_description_0005_postgresql_9p4_to_9p6": "Migrate databases from PostgreSQL 9.4 to 9.6",
|
||||||
"migration_description_0006_sync_admin_and_root_passwords": "Synchronize admin and root passwords",
|
"migration_description_0006_sync_admin_and_root_passwords": "Synchronize admin and root passwords",
|
||||||
"migration_description_0007_ssh_conf_managed_by_yunohost_step1": "Let the SSH configuration be managed by YunoHost (step 1, automatic)",
|
"migration_description_0007_ssh_conf_managed_by_yunohost_step1": "Let the SSH configuration be managed by YunoHost (step 1, automatic)",
|
||||||
"migration_description_0008_ssh_conf_managed_by_yunohost_step2": "Let the SSH configuration be managed by YunoHost (step 2, manual)",
|
"migration_description_0008_ssh_conf_managed_by_yunohost_step2": "Let the SSH configuration be managed by YunoHost (step 2, manual)",
|
||||||
"migration_description_0009_decouple_regenconf_from_services": "Decouple the regen-conf mechanism from services",
|
"migration_description_0009_decouple_regenconf_from_services": "Decouple the regen-conf mechanism from services",
|
||||||
"migration_description_0010_migrate_to_apps_json": "Remove deprecated appslists and use the new unified 'apps.json' list instead",
|
"migration_description_0010_migrate_to_apps_json": "Remove deprecated applists and use the new unified 'apps.json' list instead",
|
||||||
"migration_description_0011_setup_group_permission": "Setup user group and setup permission for apps and services",
|
"migration_description_0011_setup_group_permission": "Set up user group and set up permission for apps and services",
|
||||||
"migration_description_0012_postgresql_password_to_md5_authentication": "Force postgresql authentication to use md5 for local connections",
|
"migration_description_0012_postgresql_password_to_md5_authentication": "Force PostgreSQL authentication to use MD5 for local connections",
|
||||||
"migration_0003_start": "Starting migration to Stretch. The logs will be available in {logfile}.",
|
"migration_0003_start": "Starting migration to Stretch. The logs will be available in {logfile}.",
|
||||||
"migration_0003_patching_sources_list": "Patching the sources.lists…",
|
"migration_0003_patching_sources_list": "Patching the sources.lists…",
|
||||||
"migration_0003_main_upgrade": "Starting main upgrade…",
|
"migration_0003_main_upgrade": "Starting main upgrade…",
|
||||||
"migration_0003_fail2ban_upgrade": "Starting the fail2ban upgrade…",
|
"migration_0003_fail2ban_upgrade": "Starting the Fail2Ban upgrade…",
|
||||||
"migration_0003_restoring_origin_nginx_conf": "Your file /etc/nginx/nginx.conf was edited somehow. The migration is going to reset back to its original state first… The previous file will be available as {backup_dest}.",
|
"migration_0003_restoring_origin_nginx_conf": "Your file /etc/nginx/nginx.conf was edited somehow. The migration is going to reset to its original state first… The previous file will be available as {backup_dest}.",
|
||||||
"migration_0003_yunohost_upgrade": "Starting the yunohost package upgrade… The migration will end, but the actual upgrade will happen right after. After the operation is complete, you might have to re-log on the webadmin.",
|
"migration_0003_yunohost_upgrade": "Starting the YunoHost package upgrade… The migration will end, but the actual upgrade will happen immediately afterwards. After the operation is complete, you might have to log in on the webadmin page again.",
|
||||||
"migration_0003_not_jessie": "The current debian distribution is not Jessie!",
|
"migration_0003_not_jessie": "The current Debian distribution is not Jessie!",
|
||||||
"migration_0003_system_not_fully_up_to_date": "Your system is not fully up to date. Please perform a regular upgrade before running the migration to stretch.",
|
"migration_0003_system_not_fully_up_to_date": "Your system is not fully up-to-date. Please perform a regular upgrade before running the migration to Stretch.",
|
||||||
"migration_0003_still_on_jessie_after_main_upgrade": "Something wrong happened during the main upgrade: system is still on Jessie!? To investigate the issue, please look at {log}:s…",
|
"migration_0003_still_on_jessie_after_main_upgrade": "Something went wrong during the main upgrade: Is the system still on Jessie‽ To investigate the issue, please look at {log}:s…",
|
||||||
"migration_0003_general_warning": "Please note that this migration is a delicate operation. While the YunoHost team did its best to review and test it, the migration might still break parts of the system or apps.\n\nTherefore, we recommend you to:\n - Perform a backup of any critical data or app. More infos on https://yunohost.org/backup;\n - Be patient after launching the migration: depending on your internet connection and hardware, it might take up to a few hours for everything to upgrade.\n\nAdditionally, the port for SMTP, used by external email clients (like Thunderbird or K9-Mail) was changed from 465 (SSL/TLS) to 587 (STARTTLS). The old port 465 will automatically be closed and the new port 587 will be opened in the firewall. You and your users *will* have to adapt the configuration of your email clients accordingly!",
|
"migration_0003_general_warning": "Please note that this migration is a delicate operation. The YunoHost team did its best to review and test it, but the migration might still break parts of the system or its apps.\n\nTherefore, it is recommended to:\n - Perform a backup of any critical data or app. More info on https://yunohost.org/backup;\n - Be patient after launching the migration: Depending on your Internet connection and hardware, it might take up to a few hours for everything to upgrade.\n\nAdditionally, the port for SMTP, used by external e-mail clients (like Thunderbird or K9-Mail) was changed from 465 (SSL/TLS) to 587 (STARTTLS). The old port (465) will automatically be closed, and the new port (587) will be opened in the firewall. You and your users *will* have to adapt the configuration of your e-mail clients accordingly.",
|
||||||
"migration_0003_problematic_apps_warning": "Please note that the following possibly problematic installed apps were detected. It looks like those were not installed from an applist or are not flagged as 'working'. Consequently, we cannot guarantee that they will still work after the upgrade: {problematic_apps}",
|
"migration_0003_problematic_apps_warning": "Please note that the following possibly problematic installed apps were detected. It looks like those were not installed from an applist, or are not flagged as 'working'. Consequently, it cannot be guaranteed that they will still work after the upgrade: {problematic_apps}",
|
||||||
"migration_0003_modified_files": "Please note that the following files were found to be manually modified and might be overwritten at the end of the upgrade: {manually_modified_files}",
|
"migration_0003_modified_files": "Please note that the following files were found to be manually modified and might be overwritten following the upgrade: {manually_modified_files}",
|
||||||
"migration_0005_postgresql_94_not_installed": "Postgresql was not installed on your system. Nothing to do!",
|
"migration_0005_postgresql_94_not_installed": "PostgreSQL was not installed on your system. Nothing to do.",
|
||||||
"migration_0005_postgresql_96_not_installed": "Postgresql 9.4 has been found to be installed, but not postgresql 9.6!? Something weird might have happened on your system:(…",
|
"migration_0005_postgresql_96_not_installed": "PostgreSQL 9.4 is installed, but not postgresql 9.6‽ Something weird might have happened on your system:(…",
|
||||||
"migration_0005_not_enough_space": "Not enough space is available in {path} to run the migration right now:(.",
|
"migration_0005_not_enough_space": "Make sufficient space available in {path} to run the migration.",
|
||||||
"migration_0006_disclaimer": "YunoHost now expects admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by the admin password.",
|
"migration_0006_disclaimer": "YunoHost now expects admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by the admin password.",
|
||||||
"migration_0007_cancelled": "YunoHost has failed to improve the way your SSH conf is managed.",
|
"migration_0007_cancelled": "YunoHost has failed to improve the way your SSH conf is managed.",
|
||||||
"migration_0007_cannot_restart": "SSH can't be restarted after trying to cancel migration number 6.",
|
"migration_0007_cannot_restart": "SSH can't be restarted after trying to cancel migration number 6.",
|
||||||
"migration_0008_general_disclaimer": "To improve the security of your server, it is recommended to let YunoHost manage the SSH configuration. Your current SSH configuration differs from the recommended configuration. If you let YunoHost reconfigure it, the way you connect to your server through SSH will change in the following way:",
|
"migration_0008_general_disclaimer": "To improve the security of your server, it is recommended to let YunoHost manage the SSH configuration. Your current SSH setup differs from the recommendation. If you let YunoHost reconfigure it, the way you connect to your server through SSH will change thusly:",
|
||||||
"migration_0008_port": " - you will have to connect using port 22 instead of your current custom SSH port. Feel free to reconfigure it;",
|
"migration_0008_port": "• You will have to connect using port 22 instead of your current custom SSH port. Feel free to reconfigure it;",
|
||||||
"migration_0008_root": " - you will not be able to connect as root through SSH. Instead you should use the admin user;",
|
"migration_0008_root": "• You will not be able to connect as root through SSH. Instead you should use the admin user;",
|
||||||
"migration_0008_dsa": " - the DSA key will be disabled. Hence, you might need to invalidate a spooky warning from your SSH client, and recheck the fingerprint of your server;",
|
"migration_0008_dsa": "• The DSA key will be turned off. Hence, you might need to invalidate a spooky warning from your SSH client, and recheck the fingerprint of your server;",
|
||||||
"migration_0008_warning": "If you understand those warnings and agree to let YunoHost override your current configuration, run the migration. Otherwise, you can also skip the migration - though it is not recommended.",
|
"migration_0008_warning": "If you understand those warnings and agree to let YunoHost override your current configuration, run the migration. Otherwise, you can also skip the migration - though it is not recommended.",
|
||||||
"migration_0008_no_warning": "No major risk has been indentified about overriding your SSH configuration - but we can't be absolutely sure ;)! If you agree to let YunoHost override your current configuration, run the migration. Otherwise, you can also skip the migration - though it is not recommended.",
|
"migration_0008_no_warning": "No major risk indentified concerning overriding your SSH configuration—one can however not be absolutely sure ;)! Run the migration to override it. Otherwise, you can also skip the migration - though it is not recommended.",
|
||||||
"migration_0009_not_needed": "This migration already happened somehow ? Skipping.",
|
"migration_0009_not_needed": "This migration already happened somehow… (?) Skipping.",
|
||||||
"migration_0011_backup_before_migration": "Creating a backup of LDAP database and apps settings prior to the actual migration.",
|
"migration_0011_backup_before_migration": "Creating a backup of LDAP database and apps settings prior to the actual migration.",
|
||||||
"migration_0011_can_not_backup_before_migration": "The backup of the system before the migration failed. Migration failed. Error: {error:s}",
|
"migration_0011_can_not_backup_before_migration": "The backup of the system before the migration failed. Migration failed. Error: {error:s}",
|
||||||
"migration_0011_create_group": "Creating a group for each user...",
|
"migration_0011_create_group": "Creating a group for each user…",
|
||||||
"migration_0011_done": "Migration successful. You are now able to manage groups of users.",
|
"migration_0011_done": "Migration successful. You are now able to manage usergroups.",
|
||||||
"migration_0011_LDAP_config_dirty": "It look like that you customized your LDAP configuration. For this migration the LDAP configuration need to be updated.\nYou need to save your actual configuration, reintialize the original configuration by the command 'yunohost tools regen-conf -f' and after retry the migration",
|
"migration_0011_LDAP_config_dirty": "It look like that you customized your LDAP configuration. For this migration the LDAP configuration needs to be updated.\nYou need to save your current configuration, reintialize the original configuration by running 'yunohost tools regen-conf -f' and retry the migration",
|
||||||
"migration_0011_LDAP_update_failed": "LDAP update failed. Error: {error:s}",
|
"migration_0011_LDAP_update_failed": "Could not update LDAP. Error: {error:s}",
|
||||||
"migration_0011_migrate_permission": "Migrating permissions from apps settings to LDAP...",
|
"migration_0011_migrate_permission": "Migrating permissions from apps settings to LDAP…",
|
||||||
"migration_0011_migration_failed_trying_to_rollback": "Migration failed ... trying to rollback the system.",
|
"migration_0011_migration_failed_trying_to_rollback": "Migration failed… trying to roll back the system.",
|
||||||
"migration_0011_rollback_success": "Rollback succeeded.",
|
"migration_0011_rollback_success": "System rolled back.",
|
||||||
"migration_0011_update_LDAP_database": "Updating LDAP database...",
|
"migration_0011_update_LDAP_database": "Updating LDAP database…",
|
||||||
"migration_0011_update_LDAP_schema": "Updating LDAP schema...",
|
"migration_0011_update_LDAP_schema": "Updating LDAP schema…",
|
||||||
"migration_0011_failed_to_remove_stale_object": "Failed to remove stale object {dn}: {error}",
|
"migration_0011_failed_to_remove_stale_object": "Failed to remove stale object {dn}: {error}",
|
||||||
"migrations_already_ran": "Those migrations have already been ran: {ids}",
|
"migrations_already_ran": "Those migrations are already done: {ids}",
|
||||||
"migrations_cant_reach_migration_file": "Can't access migrations files at path %s",
|
"migrations_cant_reach_migration_file": "Could not access migrations files at path %s",
|
||||||
"migrations_dependencies_not_satisfied": "Can't run migration {id} because first you need to run these migrations: {dependencies_id}",
|
"migrations_dependencies_not_satisfied": "Cannot run migration {id} because first you need to run these migrations: {dependencies_id}",
|
||||||
"migrations_failed_to_load_migration": "Failed to load migration {id} : {error}",
|
"migrations_failed_to_load_migration": "Could not load migration {id}: {error}",
|
||||||
"migrations_exclusive_options": "--auto, --skip, and --force-rerun are exclusive options.",
|
"migrations_exclusive_options": "'--auto', '--skip', and '--force-rerun' are mutually exclusive options.",
|
||||||
"migrations_list_conflict_pending_done": "You cannot use both --previous and --done at the same time.",
|
"migrations_list_conflict_pending_done": "You cannot use both '--previous' and '--done' at the same time.",
|
||||||
"migrations_loading_migration": "Loading migration {id}…",
|
"migrations_loading_migration": "Loading migration {id}…",
|
||||||
"migrations_migration_has_failed": "Migration {id} has failed, aborting. Error: {exception}",
|
"migrations_migration_has_failed": "Migration {id} did not complete, aborting. Error: {exception}",
|
||||||
"migrations_must_provide_explicit_targets": "You must provide explicit targets when using --skip or --force-rerun",
|
"migrations_must_provide_explicit_targets": "You must provide explicit targets when using '--skip' or '--force-rerun'",
|
||||||
"migrations_need_to_accept_disclaimer": "To run the migration {id}, your must accept the following disclaimer:\n---\n{disclaimer}\n---\nIf you accept to run the migration, please re-run the command with the option --accept-disclaimer.",
|
"migrations_need_to_accept_disclaimer": "To run the migration {id}, your must accept the following disclaimer:\n---\n{disclaimer}\n---\nIf you accept to run the migration, please re-run the command with the option '--accept-disclaimer'.",
|
||||||
"migrations_no_migrations_to_run": "No migrations to run",
|
"migrations_no_migrations_to_run": "No migrations to run",
|
||||||
"migrations_no_such_migration": "No such migration called {id}",
|
"migrations_no_such_migration": "There is no migration called {id}",
|
||||||
"migrations_not_pending_cant_skip": "Those migrations are not pending so cannot be skipped: {ids}",
|
"migrations_not_pending_cant_skip": "Those migrations are not pending, so cannot be skipped: {ids}",
|
||||||
"migrations_pending_cant_rerun": "Those migrations are still pending so cannot be reran: {ids}",
|
"migrations_pending_cant_rerun": "Those migrations are still pending, so cannot be run again: {ids}",
|
||||||
"migrations_running_forward": "Running migration {id}…",
|
"migrations_running_forward": "Running migration {id}…",
|
||||||
"migrations_skip_migration": "Skipping migration {id}…",
|
"migrations_skip_migration": "Skipping migration {id}…",
|
||||||
"migrations_success_forward": "Successfully ran migration {id}!",
|
"migrations_success_forward": "Migration {id} completed",
|
||||||
"migrations_to_be_ran_manually": "Migration {id} has to be ran manually. Please go to Tools > Migrations on the webadmin, or run `yunohost tools migrations migrate`.",
|
"migrations_to_be_ran_manually": "Migration {id} has to be run manually. Please go to Tools → Migrations on the webadmin page, or run `yunohost tools migrations migrate`.",
|
||||||
"monitor_disabled": "The server monitoring has been disabled",
|
"monitor_disabled": "Server monitoring now turned off",
|
||||||
"monitor_enabled": "The server monitoring has been enabled",
|
"monitor_enabled": "Server monitoring now turned on",
|
||||||
"monitor_glances_con_failed": "Unable to connect to Glances server",
|
"monitor_glances_con_failed": "Could not connect to Glances server",
|
||||||
"monitor_not_enabled": "Server monitoring is not enabled",
|
"monitor_not_enabled": "Server monitoring is off",
|
||||||
"monitor_period_invalid": "Invalid time period",
|
"monitor_period_invalid": "Invalid time period",
|
||||||
"monitor_stats_file_not_found": "Statistics file not found",
|
"monitor_stats_file_not_found": "Statistics file not found",
|
||||||
"monitor_stats_no_update": "No monitoring statistics to update",
|
"monitor_stats_no_update": "No monitoring statistics to update",
|
||||||
|
@ -391,185 +393,186 @@
|
||||||
"mountpoint_unknown": "Unknown mountpoint",
|
"mountpoint_unknown": "Unknown mountpoint",
|
||||||
"mysql_db_creation_failed": "MySQL database creation failed",
|
"mysql_db_creation_failed": "MySQL database creation failed",
|
||||||
"mysql_db_init_failed": "MySQL database init failed",
|
"mysql_db_init_failed": "MySQL database init failed",
|
||||||
"mysql_db_initialized": "The MySQL database has been initialized",
|
"mysql_db_initialized": "The MySQL database now initialized",
|
||||||
"network_check_mx_ko": "DNS MX record is not set",
|
"network_check_mx_ko": "DNS MX record is not set",
|
||||||
"network_check_smtp_ko": "Outbound mail (SMTP port 25) seems to be blocked by your network",
|
"network_check_smtp_ko": "Outbound e-mail (SMTP port 25) seems to be blocked by your network",
|
||||||
"network_check_smtp_ok": "Outbound mail (SMTP port 25) is not blocked",
|
"network_check_smtp_ok": "Outbound e-mail (SMTP port 25) is not blocked",
|
||||||
"new_domain_required": "You must provide the new main domain",
|
"new_domain_required": "You must provide the new main domain",
|
||||||
"no_appslist_found": "No app list found",
|
"no_appslist_found": "No app list found",
|
||||||
"no_internet_connection": "Server is not connected to the Internet",
|
"no_internet_connection": "Server not connected to the Internet",
|
||||||
"no_ipv6_connectivity": "IPv6 connectivity is not available",
|
"no_ipv6_connectivity": "IPv6 connectivity is not available",
|
||||||
"no_restore_script": "No restore script found for the app '{app:s}'",
|
"no_restore_script": "No restore script found for the app '{app:s}'",
|
||||||
"not_enough_disk_space": "Not enough free disk space on '{path:s}'",
|
"not_enough_disk_space": "Not enough free space on '{path:s}'",
|
||||||
|
"operation_interrupted": "The operation was manually interrupted?",
|
||||||
"package_not_installed": "Package '{pkgname}' is not installed",
|
"package_not_installed": "Package '{pkgname}' is not installed",
|
||||||
"package_unexpected_error": "An unexpected error occurred processing the package '{pkgname}'",
|
"package_unexpected_error": "An unexpected error occurred processing the package '{pkgname}'",
|
||||||
"package_unknown": "Unknown package '{pkgname}'",
|
"package_unknown": "Unknown package '{pkgname}'",
|
||||||
"packages_upgrade_critical_later": "Critical packages ({packages:s}) will be upgraded later",
|
"packages_upgrade_critical_later": "Critical packages ({packages:s}) will be upgraded later",
|
||||||
"packages_upgrade_failed": "Unable to upgrade all of the packages",
|
"packages_upgrade_failed": "Could not upgrade all the packages",
|
||||||
"password_listed": "This password is among the most used password in the world. Please choose something a bit more unique.",
|
"password_listed": "This password is among the most used password in the world. Please choose something more unique.",
|
||||||
"password_too_simple_1": "Password needs to be at least 8 characters long",
|
"password_too_simple_1": "The password needs to be at least 8 characters long",
|
||||||
"password_too_simple_2": "Password needs to be at least 8 characters long and contains digit, upper and lower characters",
|
"password_too_simple_2": "The password needs to be at least 8 characters long and contain a digit, upper and lower characters",
|
||||||
"password_too_simple_3": "Password needs to be at least 8 characters long and contains digit, upper, lower and special characters",
|
"password_too_simple_3": "The password needs to be at least 8 characters long and contain a digit, upper, lower and special characters",
|
||||||
"password_too_simple_4": "Password needs to be at least 12 characters long and contains digit, upper, lower and special characters",
|
"password_too_simple_4": "The password needs to be at least 12 characters long and contain a digit, upper, lower and special characters",
|
||||||
"path_removal_failed": "Unable to remove path {:s}",
|
"path_removal_failed": "Could not remove path {:s}",
|
||||||
"pattern_backup_archive_name": "Must be a valid filename with max 30 characters, and alphanumeric and -_. characters only",
|
"pattern_backup_archive_name": "Must be a valid filename with max 30 characters, alphanumeric and -_. characters only",
|
||||||
"pattern_domain": "Must be a valid domain name (e.g. my-domain.org)",
|
"pattern_domain": "Must be a valid domain name (e.g. my-domain.org)",
|
||||||
"pattern_email": "Must be a valid email address (e.g. someone@domain.org)",
|
"pattern_email": "Must be a valid email address (e.g. someone@domain.org)",
|
||||||
"pattern_firstname": "Must be a valid first name",
|
"pattern_firstname": "Must be a valid first name",
|
||||||
"pattern_lastname": "Must be a valid last name",
|
"pattern_lastname": "Must be a valid last name",
|
||||||
"pattern_listname": "Must be alphanumeric and underscore characters only",
|
"pattern_listname": "Must be alphanumeric and underscore characters only",
|
||||||
"pattern_mailbox_quota": "Must be a size with b/k/M/G/T suffix or 0 to disable the quota",
|
"pattern_mailbox_quota": "Must be a size with b/k/M/G/T suffix or 0 to not have a quota",
|
||||||
"pattern_password": "Must be at least 3 characters long",
|
"pattern_password": "Must be at least 3 characters long",
|
||||||
"pattern_port": "Must be a valid port number (i.e. 0-65535)",
|
"pattern_port": "Must be a valid port number (i.e. 0-65535)",
|
||||||
"pattern_port_or_range": "Must be a valid port number (i.e. 0-65535) or range of ports (e.g. 100:200)",
|
"pattern_port_or_range": "Must be a valid port number (i.e. 0-65535) or range of ports (e.g. 100:200)",
|
||||||
"pattern_positive_number": "Must be a positive number",
|
"pattern_positive_number": "Must be a positive number",
|
||||||
"pattern_username": "Must be lower-case alphanumeric and underscore characters only",
|
"pattern_username": "Must be lower-case alphanumeric and underscore characters only",
|
||||||
"pattern_password_app": "Sorry, passwords should not contain the following characters: {forbidden_chars}",
|
"pattern_password_app": "Sorry, passwords can not contain the following characters: {forbidden_chars}",
|
||||||
"permission_already_allowed": "Group '{group}' already has permission '{permission}' enabled'",
|
"permission_already_allowed": "Group '{group}' already has permission '{permission}' enabled'",
|
||||||
"permission_already_disallowed": "Group '{group}' already has permission '{permission}' disabled'",
|
"permission_already_disallowed": "Group '{group}' already has permission '{permission}' disabled'",
|
||||||
"permission_already_exist": "Permission '{permission}' already exists",
|
"permission_already_exist": "Permission '{permission}' already exists",
|
||||||
"permission_cannot_remove_main": "Removing a main permission is not allowed",
|
"permission_cannot_remove_main": "Removing a main permission is not allowed",
|
||||||
"permission_created": "Permission '{permission}' created",
|
"permission_created": "Permission '{permission:s}' created",
|
||||||
"permission_creation_failed": "Failed to create permission '{permission}': {error}",
|
"permission_creation_failed": "Could not create permission '{permission}': {error}",
|
||||||
"permission_deleted": "Permission '{permission}' deleted",
|
"permission_deleted": "Permission '{permission:s}' deleted",
|
||||||
"permission_deletion_failed": "Failed to delete permission '{permission}': {error}",
|
"permission_deletion_failed": "Could not delete permission '{permission}': {error}",
|
||||||
"permission_not_found": "Permission '{permission}' does not seem to exist ?",
|
"permission_not_found": "Permission '{permission:s}' not found",
|
||||||
"permission_update_failed": "Failed to update permission '{permission}' : {error}",
|
"permission_update_failed": "Could not update permission '{permission}' : {error}",
|
||||||
"permission_updated": "Permission '{permission}' updated",
|
"permission_updated": "Permission '{permission:s}' updated",
|
||||||
"permission_update_nothing_to_do": "No permissions to update",
|
"permission_update_nothing_to_do": "No permissions to update",
|
||||||
"port_already_closed": "Port {port:d} is already closed for {ip_version:s} connections",
|
"port_already_closed": "Port {port:d} is already closed for {ip_version:s} connections",
|
||||||
"port_already_opened": "Port {port:d} is already opened for {ip_version:s} connections",
|
"port_already_opened": "Port {port:d} is already opened for {ip_version:s} connections",
|
||||||
"port_available": "Port {port:d} is available",
|
"port_available": "Port {port:d} is available",
|
||||||
"port_unavailable": "Port {port:d} is not available",
|
"port_unavailable": "Port {port:d} is not available",
|
||||||
"recommend_to_add_first_user": "The post-install is finished but YunoHost needs at least one user to work correctly, you should add one using 'yunohost user create <username>' or the admin interface.",
|
"recommend_to_add_first_user": "The post-install is finished, but YunoHost needs at least one user to work correctly, you should add one using 'yunohost user create <username>' or do it from the admin interface.",
|
||||||
"regenconf_file_backed_up": "The configuration file '{conf}' has been backed up to '{backup}'",
|
"regenconf_file_backed_up": "Configuration file '{conf}' backed up to '{backup}'",
|
||||||
"regenconf_file_copy_failed": "Unable to copy the new configuration file '{new}' to '{conf}'",
|
"regenconf_file_copy_failed": "Could not copy the new configuration file '{new}' to '{conf}'",
|
||||||
"regenconf_file_kept_back": "The configuration file '{conf}' is expected to be deleted by regen-conf (category {category}) but has been kept back.",
|
"regenconf_file_kept_back": "The configuration file '{conf}' is expected to be deleted by regen-conf (category {category}) but was kept back.",
|
||||||
"regenconf_file_manually_modified": "The configuration file '{conf}' has been manually modified and will not be updated",
|
"regenconf_file_manually_modified": "The configuration file '{conf}' has been manually modified and will not be updated",
|
||||||
"regenconf_file_manually_removed": "The configuration file '{conf}' has been manually removed and will not be created",
|
"regenconf_file_manually_removed": "The configuration file '{conf}' was removed manually, and will not be created",
|
||||||
"regenconf_file_remove_failed": "Unable to remove the configuration file '{conf}'",
|
"regenconf_file_remove_failed": "Could not remove the configuration file '{conf}'",
|
||||||
"regenconf_file_removed": "The configuration file '{conf}' has been removed",
|
"regenconf_file_removed": "Configuration file '{conf}' removed",
|
||||||
"regenconf_file_updated": "The configuration file '{conf}' has been updated",
|
"regenconf_file_updated": "Configuration file '{conf}' updated",
|
||||||
"regenconf_now_managed_by_yunohost": "The configuration file '{conf}' is now managed by YunoHost (category {category}).",
|
"regenconf_now_managed_by_yunohost": "The configuration file '{conf}' is now managed by YunoHost (category {category}).",
|
||||||
"regenconf_up_to_date": "The configuration is already up-to-date for category '{category}'",
|
"regenconf_up_to_date": "The configuration is already up-to-date for category '{category}'",
|
||||||
"regenconf_updated": "The configuration has been updated for category '{category}'",
|
"regenconf_updated": "Configuration for category '{category}' updated",
|
||||||
"regenconf_would_be_updated": "The configuration would have been updated for category '{category}'",
|
"regenconf_would_be_updated": "The configuration would have been updated for category '{category}'",
|
||||||
"regenconf_dry_pending_applying": "Checking pending configuration which would have been applied for category '{category}'…",
|
"regenconf_dry_pending_applying": "Checking pending configuration which would have been applied for category '{category}'…",
|
||||||
"regenconf_failed": "Unable to regenerate the configuration for category(s): {categories}",
|
"regenconf_failed": "Could not regenerate the configuration for category(s): {categories}",
|
||||||
"regenconf_pending_applying": "Applying pending configuration for category '{category}'…",
|
"regenconf_pending_applying": "Applying pending configuration for category '{category}'…",
|
||||||
"restore_action_required": "You must specify something to restore",
|
"restore_action_required": "You must pick something to restore",
|
||||||
"restore_already_installed_app": "An app is already installed with the id '{app:s}'",
|
"restore_already_installed_app": "An app with the ID '{app:s}' is already installed",
|
||||||
"restore_app_failed": "Unable to restore the app '{app:s}'",
|
"restore_app_failed": "Could not restore the app '{app:s}'",
|
||||||
"restore_cleaning_failed": "Unable to clean-up the temporary restoration directory",
|
"restore_cleaning_failed": "Could not clean up the temporary restoration directory",
|
||||||
"restore_complete": "Restore complete",
|
"restore_complete": "Restored",
|
||||||
"restore_confirm_yunohost_installed": "Do you really want to restore an already installed system? [{answers:s}]",
|
"restore_confirm_yunohost_installed": "Do you really want to restore an already installed system? [{answers:s}]",
|
||||||
"restore_extracting": "Extracting needed files from the archive…",
|
"restore_extracting": "Extracting needed files from the archive…",
|
||||||
"restore_failed": "Unable to restore the system",
|
"restore_failed": "Could not restore system",
|
||||||
"restore_hook_unavailable": "Restoration script for '{part:s}' not available on your system and not in the archive either",
|
"restore_hook_unavailable": "The restoration script for '{part:s}' not available on your system and not in the archive either",
|
||||||
"restore_may_be_not_enough_disk_space": "Your system seems not to have enough disk space (freespace: {free_space:d} B, needed space: {needed_space:d} B, security margin: {margin:d} B)",
|
"restore_may_be_not_enough_disk_space": "Your system seems does not have enough space (free: {free_space:d} B, needed space: {needed_space:d} B, security margin: {margin:d} B)",
|
||||||
"restore_mounting_archive": "Mounting archive into '{path:s}'",
|
"restore_mounting_archive": "Mounting archive into '{path:s}'",
|
||||||
"restore_not_enough_disk_space": "Not enough disk space (freespace: {free_space:d} B, needed space: {needed_space:d} B, security margin: {margin:d} B)",
|
"restore_not_enough_disk_space": "Not enough space (space: {free_space:d} B, needed space: {needed_space:d} B, security margin: {margin:d} B)",
|
||||||
"restore_nothings_done": "Nothing has been restored",
|
"restore_nothings_done": "Nothing was restored",
|
||||||
"restore_removing_tmp_dir_failed": "Unable to remove an old temporary directory",
|
"restore_removing_tmp_dir_failed": "Could not remove an old temporary directory",
|
||||||
"restore_running_app_script": "Running restore script of app '{app:s}'…",
|
"restore_running_app_script": "Restoring the app '{app:s}'…",
|
||||||
"restore_running_hooks": "Running restoration hooks…",
|
"restore_running_hooks": "Running restoration hooks…",
|
||||||
"restore_system_part_failed": "Unable to restore the '{part:s}' system part",
|
"restore_system_part_failed": "Could not restore the '{part:s}' system part",
|
||||||
"root_password_desynchronized": "The admin password has been changed, but YunoHost was unable to propagate this on the root password!",
|
"root_password_desynchronized": "The admin password was changed, but YunoHost could not propagate this to the root password!",
|
||||||
"root_password_replaced_by_admin_password": "Your root password have been replaced by your admin password.",
|
"root_password_replaced_by_admin_password": "Your root password have been replaced by your admin password.",
|
||||||
"server_shutdown": "The server will shutdown",
|
"server_shutdown": "The server will shut down",
|
||||||
"server_shutdown_confirm": "The server will shutdown immediatly, are you sure? [{answers:s}]",
|
"server_shutdown_confirm": "The server will shutdown immediatly, are you sure? [{answers:s}]",
|
||||||
"server_reboot": "The server will reboot",
|
"server_reboot": "The server will reboot",
|
||||||
"server_reboot_confirm": "The server will reboot immediatly, are you sure? [{answers:s}]",
|
"server_reboot_confirm": "The server will reboot immediatly, are you sure? [{answers:s}]",
|
||||||
"service_add_failed": "Unable to add service '{service:s}'",
|
"service_add_failed": "Could not add the service '{service:s}'",
|
||||||
"service_added": "The service '{service:s}' has been added",
|
"service_added": "The service '{service:s}' added",
|
||||||
"service_already_started": "Service '{service:s}' has already been started",
|
"service_already_started": "The service '{service:s}' has already been started",
|
||||||
"service_already_stopped": "Service '{service:s}' has already been stopped",
|
"service_already_stopped": "The service '{service:s}' has already been stopped",
|
||||||
"service_cmd_exec_failed": "Unable to execute command '{command:s}'",
|
"service_cmd_exec_failed": "Could not execute the command '{command:s}'",
|
||||||
"service_description_avahi-daemon": "allows to reach your server using yunohost.local on your local network",
|
"service_description_avahi-daemon": "Allows you to reach your server using 'yunohost.local' in your local network",
|
||||||
"service_description_dnsmasq": "handles domain name resolution (DNS)",
|
"service_description_dnsmasq": "Handles domain name resolution (DNS)",
|
||||||
"service_description_dovecot": "allows e-mail client to access/fetch email (via IMAP and POP3)",
|
"service_description_dovecot": "Allows e-mail clients to access/fetch email (via IMAP and POP3)",
|
||||||
"service_description_fail2ban": "protects against bruteforce and other kind of attacks from the Internet",
|
"service_description_fail2ban": "Protects against brute-force and other kinds of attacks from the Internet",
|
||||||
"service_description_glances": "monitors system information on your server",
|
"service_description_glances": "Monitors system info on your server",
|
||||||
"service_description_metronome": "manage XMPP instant messaging accounts",
|
"service_description_metronome": "Manage XMPP instant messaging accounts",
|
||||||
"service_description_mysql": "stores applications data (SQL database)",
|
"service_description_mysql": "Stores applications data (SQL database)",
|
||||||
"service_description_nginx": "serves or provides access to all the websites hosted on your server",
|
"service_description_nginx": "Serves or provides access to all the websites hosted on your server",
|
||||||
"service_description_nslcd": "handles YunoHost user shell connection",
|
"service_description_nslcd": "Handles YunoHost user shell connection",
|
||||||
"service_description_php7.0-fpm": "runs applications written in PHP with nginx",
|
"service_description_php7.0-fpm": "Runs applications written in PHP with NGINX",
|
||||||
"service_description_postfix": "used to send and receive emails",
|
"service_description_postfix": "Used to send and receive e-mails",
|
||||||
"service_description_redis-server": "a specialized database used for rapid data access, task queue and communication between programs",
|
"service_description_redis-server": "A specialized database used for rapid data access, task queue, and communication between programs",
|
||||||
"service_description_rmilter": "checks various parameters in emails",
|
"service_description_rmilter": "Checks various parameters in e-mails",
|
||||||
"service_description_rspamd": "filters spam, and other email-related features",
|
"service_description_rspamd": "Filters spam, and other e-mail related features",
|
||||||
"service_description_slapd": "stores users, domains and related information",
|
"service_description_slapd": "Stores users, domains and related info",
|
||||||
"service_description_ssh": "allows you to connect remotely to your server via a terminal (SSH protocol)",
|
"service_description_ssh": "Allows you to connect remotely to your server via a terminal (SSH protocol)",
|
||||||
"service_description_yunohost-api": "manages interactions between the YunoHost web interface and the system",
|
"service_description_yunohost-api": "Manages interactions between the YunoHost web interface and the system",
|
||||||
"service_description_yunohost-firewall": "manages open and close connexion ports to services",
|
"service_description_yunohost-firewall": "Manages open and close connexion ports to services",
|
||||||
"service_disable_failed": "Unable to disable service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_disable_failed": "Could not turn off the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_disabled": "The service '{service:s}' has been disabled",
|
"service_disabled": "'{service:s}' service turned off",
|
||||||
"service_enable_failed": "Unable to enable service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_enable_failed": "Could not turn on the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_enabled": "The service '{service:s}' has been enabled",
|
"service_enabled": "'{service:s}' service turned off",
|
||||||
"service_no_log": "No log to display for service '{service:s}'",
|
"service_no_log": "No log to display for service '{service:s}'",
|
||||||
"service_regen_conf_is_deprecated": "'yunohost service regen-conf' is deprecated! Please use 'yunohost tools regen-conf' instead.",
|
"service_regen_conf_is_deprecated": "'yunohost service regen-conf' is deprecated! Please use 'yunohost tools regen-conf' instead.",
|
||||||
"service_remove_failed": "Unable to remove service '{service:s}'",
|
"service_remove_failed": "Could not remove the service '{service:s}'",
|
||||||
"service_removed": "The service '{service:s}' has been removed",
|
"service_removed": "'{service:s}' service removed",
|
||||||
"service_reload_failed": "Unable to reload service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_reload_failed": "Could not reload the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_reloaded": "The service '{service:s}' has been reloaded",
|
"service_reloaded": "'{service:s}' service reloaded",
|
||||||
"service_restart_failed": "Unable to restart service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_restart_failed": "Could not restart the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_restarted": "The service '{service:s}' has been restarted",
|
"service_restarted": "'{service:s}' service restarted",
|
||||||
"service_reload_or_restart_failed": "Unable to reload or restart service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_reload_or_restart_failed": "Could not reload or restart the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_reloaded_or_restarted": "The service '{service:s}' has been reloaded or restarted",
|
"service_reloaded_or_restarted": "'{service:s}' service reloaded or restarted",
|
||||||
"service_start_failed": "Unable to start service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_start_failed": "Could not start the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_started": "The service '{service:s}' has been started",
|
"service_started": "'{service:s}' service started",
|
||||||
"service_status_failed": "Unable to determine status of service '{service:s}'",
|
"service_status_failed": "Could not determine status of the service '{service:s}'",
|
||||||
"service_stop_failed": "Unable to stop service '{service:s}'\n\nRecent service logs:{logs:s}",
|
"service_stop_failed": "Could not stop the service '{service:s}'\n\nRecent service logs:{logs:s}",
|
||||||
"service_stopped": "The service '{service:s}' has been stopped",
|
"service_stopped": "'{service:s}' service stopped",
|
||||||
"service_unknown": "Unknown service '{service:s}'",
|
"service_unknown": "Unknown service '{service:s}'",
|
||||||
"ssowat_conf_generated": "The SSOwat configuration has been generated",
|
"ssowat_conf_generated": "SSOwat configuration generated",
|
||||||
"ssowat_conf_updated": "The SSOwat configuration has been updated",
|
"ssowat_conf_updated": "SSOwat configuration updated",
|
||||||
"ssowat_persistent_conf_read_error": "Error while reading SSOwat persistent configuration: {error:s}. Edit /etc/ssowat/conf.json.persistent file to fix the JSON syntax",
|
"ssowat_persistent_conf_read_error": "Could not read persistent SSOwat configuration: {error:s}. Edit /etc/ssowat/conf.json.persistent file to fix the JSON syntax",
|
||||||
"ssowat_persistent_conf_write_error": "Error while saving SSOwat persistent configuration: {error:s}. Edit /etc/ssowat/conf.json.persistent file to fix the JSON syntax",
|
"ssowat_persistent_conf_write_error": "Could not save persistent SSOwat configuration: {error:s}. Edit /etc/ssowat/conf.json.persistent file to fix the JSON syntax",
|
||||||
"system_upgraded": "The system has been upgraded",
|
"system_upgraded": "System upgraded",
|
||||||
"system_username_exists": "Username already exists in the system users",
|
"system_username_exists": "Username already exists in the list of system users",
|
||||||
"this_action_broke_dpkg": "This action broke dpkg/apt (the system package managers)... You can try to solve this issue by connecting through SSH and running `sudo dpkg --configure -a`.",
|
"this_action_broke_dpkg": "This action broke dpkg/APT (the system package managers)… You can try to solve this issue by connecting through SSH and running `sudo dpkg --configure -a`.",
|
||||||
"tools_update_failed_to_app_fetchlist": "Failed to update YunoHost's applists because: {error}",
|
"tools_update_failed_to_app_fetchlist": "Could not update YunoHost's applists because: {error}",
|
||||||
"tools_upgrade_at_least_one": "Please specify --apps OR --system",
|
"tools_upgrade_at_least_one": "Please specify '--apps', or '--system'",
|
||||||
"tools_upgrade_cant_both": "Cannot upgrade both system and apps at the same time",
|
"tools_upgrade_cant_both": "Cannot upgrade both system and apps at the same time",
|
||||||
"tools_upgrade_cant_hold_critical_packages": "Unable to hold critical packages ...",
|
"tools_upgrade_cant_hold_critical_packages": "Could not hold critical packages…",
|
||||||
"tools_upgrade_cant_unhold_critical_packages": "Unable to unhold critical packages ...",
|
"tools_upgrade_cant_unhold_critical_packages": "Could not to unhold critical packages…",
|
||||||
"tools_upgrade_regular_packages": "Now upgrading 'regular' (non-yunohost-related) packages ...",
|
"tools_upgrade_regular_packages": "Now upgrading 'regular' (non-yunohost-related) packages…",
|
||||||
"tools_upgrade_regular_packages_failed": "Unable to upgrade packages: {packages_list}",
|
"tools_upgrade_regular_packages_failed": "Could not upgrade packages: {packages_list}",
|
||||||
"tools_upgrade_special_packages": "Now upgrading 'special' (yunohost-related) packages ...",
|
"tools_upgrade_special_packages": "Now upgrading 'special' (yunohost-related) packages…",
|
||||||
"tools_upgrade_special_packages_explanation": "This action will end but the actual special upgrade will continue in background. Please don't start any other action on your server in the next ~10 minutes (depending on your hardware speed). Once it's done, you may have to re-log on the webadmin. The upgrade log will be available in Tools > Log (in the webadmin) or through 'yunohost log list' (in command line).",
|
"tools_upgrade_special_packages_explanation": "This action will end, but the actual special upgrade will continue in background. Please don't start any other action on your server in the next ~10 minutes (depending on your hardware speed). Once it i done, you may have to log in on the webadmin page again. The upgrade log will be available in Tools → Log (on the webadmin page) or through 'yunohost log list' (from the command line).",
|
||||||
"tools_upgrade_special_packages_completed": "YunoHost package upgrade completed !\nPress [Enter] to get the command line back",
|
"tools_upgrade_special_packages_completed": "YunoHost package upgrade completed.\nPress [Enter] to get the command line back",
|
||||||
"unbackup_app": "App '{app:s}' will not be saved",
|
"unbackup_app": "App '{app:s}' will not be saved",
|
||||||
"unexpected_error": "An unexpected error occured: {error}",
|
"unexpected_error": "Something unexpected went wrong: {error}",
|
||||||
"unit_unknown": "Unknown unit '{unit:s}'",
|
"unit_unknown": "Unknown unit '{unit:s}'",
|
||||||
"unlimit": "No quota",
|
"unlimit": "No quota",
|
||||||
"unrestore_app": "App '{app:s}' will not be restored",
|
"unrestore_app": "App '{app:s}' will not be restored",
|
||||||
"update_apt_cache_failed": "Unable to update the cache of APT (Debian's package manager). Here is a dump of the sources.list lines which might help to identify problematic lines : \n{sourceslist}",
|
"update_apt_cache_failed": "Could not to update the cache of APT (Debian's package manager). Here is a dump of the sources.list lines, which might help identify problematic lines: \n{sourceslist}",
|
||||||
"update_apt_cache_warning": "Some errors happened while updating the cache of APT (Debian's package manager). Here is a dump of the sources.list lines which might help to identify problematic lines : \n{sourceslist}",
|
"update_apt_cache_warning": "Something went wrong while updating the cache of APT (Debian's package manager). Here is a dump of the sources.list lines, which might help identify problematic lines: \n{sourceslist}",
|
||||||
"updating_apt_cache": "Fetching available upgrades for system packages…",
|
"updating_apt_cache": "Fetching available upgrades for system packages…",
|
||||||
"updating_app_lists": "Fetching available upgrades for applications…",
|
"updating_app_lists": "Fetching available upgrades for applications…",
|
||||||
"upgrade_complete": "Upgrade complete",
|
"upgrade_complete": "Upgrade complete",
|
||||||
"upgrading_packages": "Upgrading packages…",
|
"upgrading_packages": "Upgrading packages…",
|
||||||
"upnp_dev_not_found": "No UPnP device found",
|
"upnp_dev_not_found": "No UPnP device found",
|
||||||
"upnp_disabled": "UPnP has been disabled",
|
"upnp_disabled": "UPnP turned off",
|
||||||
"upnp_enabled": "UPnP has been enabled",
|
"upnp_enabled": "UPnP turned on",
|
||||||
"upnp_port_open_failed": "Unable to open UPnP ports",
|
"upnp_port_open_failed": "Could not open port via UPnP",
|
||||||
"user_already_exists": "User {user} already exists",
|
"user_already_exists": "User {user} already exists",
|
||||||
"user_created": "The user has been created",
|
"user_created": "User created",
|
||||||
"user_creation_failed": "Unable to create user {user}: {error}",
|
"user_creation_failed": "Could not create user {user}: {error}",
|
||||||
"user_deleted": "The user has been deleted",
|
"user_deleted": "User deleted",
|
||||||
"user_deletion_failed": "Unable to delete user {user}: {error}",
|
"user_deletion_failed": "Could not delete user {user}: {error}",
|
||||||
"user_home_creation_failed": "Unable to create user home folder",
|
"user_home_creation_failed": "Could not create 'home' folder for user",
|
||||||
"user_info_failed": "Unable to retrieve user information",
|
"user_info_failed": "Could not retrieve user info",
|
||||||
"user_unknown": "Unknown user: {user:s}",
|
"user_unknown": "Unknown user: {user:s}",
|
||||||
"user_update_failed": "Unable to update user {user}: {error}",
|
"user_update_failed": "Could not update user {user}: {error}",
|
||||||
"user_updated": "The user has been updated",
|
"user_updated": "User info changed",
|
||||||
"users_available": "Available users:",
|
"users_available": "Available users:",
|
||||||
"yunohost_already_installed": "YunoHost is already installed",
|
"yunohost_already_installed": "YunoHost is already installed",
|
||||||
"yunohost_ca_creation_failed": "Unable to create certificate authority",
|
"yunohost_ca_creation_failed": "Could not create certificate authority",
|
||||||
"yunohost_ca_creation_success": "The local certification authority has been created.",
|
"yunohost_ca_creation_success": "Local certification authority created.",
|
||||||
"yunohost_configured": "YunoHost has been configured",
|
"yunohost_configured": "YunoHost now configured",
|
||||||
"yunohost_installing": "Installing YunoHost…",
|
"yunohost_installing": "Installing YunoHost…",
|
||||||
"yunohost_not_installed": "YunoHost is not or not correctly installed. Please execute 'yunohost tools postinstall'"
|
"yunohost_not_installed": "YunoHost is incorrectly or not correctly installed. Please run 'yunohost tools postinstall'"
|
||||||
}
|
}
|
||||||
|
|
335
locales/es.json
335
locales/es.json
|
@ -16,15 +16,15 @@
|
||||||
"app_manifest_invalid": "El manifiesto de la aplicación no es válido: {error}",
|
"app_manifest_invalid": "El manifiesto de la aplicación no es válido: {error}",
|
||||||
"app_no_upgrade": "No hay aplicaciones para actualizar",
|
"app_no_upgrade": "No hay aplicaciones para actualizar",
|
||||||
"app_not_correctly_installed": "La aplicación {app:s} 8 parece estar incorrectamente instalada",
|
"app_not_correctly_installed": "La aplicación {app:s} 8 parece estar incorrectamente instalada",
|
||||||
"app_not_installed": "{app:s} 9 no está instalada",
|
"app_not_installed": "La aplicación «{app:s}» no está instalada. Esta es la lista de todas las aplicaciones instaladas: {all_apps}",
|
||||||
"app_not_properly_removed": "La {app:s} 0 no ha sido desinstalada correctamente",
|
"app_not_properly_removed": "La {app:s} 0 no ha sido desinstalada correctamente",
|
||||||
"app_package_need_update": "El paquete de la aplicación {app} necesita ser actualizada debido a los cambios en YunoHost",
|
"app_package_need_update": "El paquete de la aplicación {app} necesita ser actualizada debido a los cambios en YunoHost",
|
||||||
"app_recent_version_required": "{:s} requiere una versión más reciente de moulinette ",
|
"app_recent_version_required": "{:s} requiere una versión más reciente de moulinette ",
|
||||||
"app_removed": "{app:s} ha sido eliminada",
|
"app_removed": "{app:s} ha sido eliminada",
|
||||||
"app_requirements_checking": "Comprobando los paquetes requeridos por {app}...",
|
"app_requirements_checking": "Comprobando los paquetes necesarios para {app}…",
|
||||||
"app_requirements_failed": "No se cumplen los requisitos para {app}: {error}",
|
"app_requirements_failed": "No se cumplen los requisitos para {app}: {error}",
|
||||||
"app_requirements_unmeet": "No se cumplen los requisitos para {app}, el paquete {pkgname} ({version}) debe ser {spec}",
|
"app_requirements_unmeet": "No se cumplen los requisitos para {app}, el paquete {pkgname} ({version}) debe ser {spec}",
|
||||||
"app_sources_fetch_failed": "No se pudieron descargar los archivos del código fuente",
|
"app_sources_fetch_failed": "No se pudo obtener los archivos con el código fuente, ¿es la URL correcta?",
|
||||||
"app_unknown": "Aplicación desconocida",
|
"app_unknown": "Aplicación desconocida",
|
||||||
"app_unsupported_remote_type": "Tipo remoto no soportado por la aplicación",
|
"app_unsupported_remote_type": "Tipo remoto no soportado por la aplicación",
|
||||||
"app_upgrade_failed": "No se pudo actualizar la aplicación {app:s}",
|
"app_upgrade_failed": "No se pudo actualizar la aplicación {app:s}",
|
||||||
|
@ -50,11 +50,11 @@
|
||||||
"backup_archive_open_failed": "No se pudo abrir la copia de seguridad",
|
"backup_archive_open_failed": "No se pudo abrir la copia de seguridad",
|
||||||
"backup_cleaning_failed": "No se puede limpiar el directorio temporal de copias de seguridad",
|
"backup_cleaning_failed": "No se puede limpiar el directorio temporal de copias de seguridad",
|
||||||
"backup_created": "Se ha creado la copia de seguridad",
|
"backup_created": "Se ha creado la copia de seguridad",
|
||||||
"backup_creating_archive": "Creando copia de seguridad...",
|
"backup_creating_archive": "Creando el archivo de copia de seguridad…",
|
||||||
"backup_creation_failed": "No se pudo crear la copia de seguridad",
|
"backup_creation_failed": "No se pudo crear la copia de seguridad",
|
||||||
"backup_delete_error": "No se puede eliminar '{path:s}'",
|
"backup_delete_error": "No se puede eliminar '{path:s}'",
|
||||||
"backup_deleted": "La copia de seguridad ha sido eliminada",
|
"backup_deleted": "La copia de seguridad ha sido eliminada",
|
||||||
"backup_extracting_archive": "Extrayendo la copia de seguridad...",
|
"backup_extracting_archive": "Extrayendo el archivo de la copia de seguridad…",
|
||||||
"backup_hook_unknown": "Hook de copia de seguridad desconocido '{hook:s}'",
|
"backup_hook_unknown": "Hook de copia de seguridad desconocido '{hook:s}'",
|
||||||
"backup_invalid_archive": "La copia de seguridad no es válida",
|
"backup_invalid_archive": "La copia de seguridad no es válida",
|
||||||
"backup_nothings_done": "No hay nada que guardar",
|
"backup_nothings_done": "No hay nada que guardar",
|
||||||
|
@ -86,21 +86,21 @@
|
||||||
"domain_zone_exists": "El archivo de zona del DNS ya existe",
|
"domain_zone_exists": "El archivo de zona del DNS ya existe",
|
||||||
"domain_zone_not_found": "No se ha encontrado el archivo de zona del DNS para el dominio [:s]",
|
"domain_zone_not_found": "No se ha encontrado el archivo de zona del DNS para el dominio [:s]",
|
||||||
"done": "Hecho.",
|
"done": "Hecho.",
|
||||||
"downloading": "Descargando...",
|
"downloading": "Descargando…",
|
||||||
"dyndns_cron_installed": "La tarea cron para DynDNS ha sido instalada",
|
"dyndns_cron_installed": "La tarea cron para DynDNS ha sido instalada",
|
||||||
"dyndns_cron_remove_failed": "No se pudo eliminar la tarea cron DynDNS",
|
"dyndns_cron_remove_failed": "No se pudo eliminar la tarea cron de DynDNS por: {error}",
|
||||||
"dyndns_cron_removed": "La tarea cron DynDNS ha sido eliminada",
|
"dyndns_cron_removed": "La tarea cron DynDNS ha sido eliminada",
|
||||||
"dyndns_ip_update_failed": "No se pudo actualizar la dirección IP en el DynDNS",
|
"dyndns_ip_update_failed": "No se pudo actualizar la dirección IP en el DynDNS",
|
||||||
"dyndns_ip_updated": "Su dirección IP ha sido actualizada en el DynDNS",
|
"dyndns_ip_updated": "Su dirección IP ha sido actualizada en el DynDNS",
|
||||||
"dyndns_key_generating": "Se está generando la clave del DNS. Esto podría tardar unos minutos...",
|
"dyndns_key_generating": "Generando la clave del DNS. Esto podría tardar un rato…",
|
||||||
"dyndns_key_not_found": "No se ha encontrado la clave DNS para el dominio",
|
"dyndns_key_not_found": "No se ha encontrado la clave DNS para el dominio",
|
||||||
"dyndns_no_domain_registered": "Ningún dominio ha sido registrado con DynDNS",
|
"dyndns_no_domain_registered": "Ningún dominio ha sido registrado con DynDNS",
|
||||||
"dyndns_registered": "El dominio DynDNS ha sido registrado",
|
"dyndns_registered": "El dominio DynDNS ha sido registrado",
|
||||||
"dyndns_registration_failed": "No se pudo registrar el dominio DynDNS: {error:s}",
|
"dyndns_registration_failed": "No se pudo registrar el dominio DynDNS: {error:s}",
|
||||||
"dyndns_unavailable": "El dominio {domain:s} no está disponible.",
|
"dyndns_unavailable": "El dominio {domain:s} no está disponible.",
|
||||||
"executing_command": "Ejecutando el comando '{command:s}'...",
|
"executing_command": "Ejecutando la orden «{command:s}»…",
|
||||||
"executing_script": "Ejecutando el script '{script:s}'...",
|
"executing_script": "Ejecutando el guión «{script:s}»…",
|
||||||
"extracting": "Extrayendo...",
|
"extracting": "Extrayendo…",
|
||||||
"field_invalid": "Campo no válido '{:s}'",
|
"field_invalid": "Campo no válido '{:s}'",
|
||||||
"firewall_reload_failed": "No se pudo recargar el cortafuegos",
|
"firewall_reload_failed": "No se pudo recargar el cortafuegos",
|
||||||
"firewall_reloaded": "El cortafuegos ha sido recargado",
|
"firewall_reloaded": "El cortafuegos ha sido recargado",
|
||||||
|
@ -176,8 +176,8 @@
|
||||||
"restore_failed": "No se pudo restaurar el sistema",
|
"restore_failed": "No se pudo restaurar el sistema",
|
||||||
"restore_hook_unavailable": "El script de restauración '{part:s}' no está disponible en su sistema y tampoco en el archivo",
|
"restore_hook_unavailable": "El script de restauración '{part:s}' no está disponible en su sistema y tampoco en el archivo",
|
||||||
"restore_nothings_done": "No se ha restaurado nada",
|
"restore_nothings_done": "No se ha restaurado nada",
|
||||||
"restore_running_app_script": "Ejecutando el script de restauración de la aplicación '{app:s}'...",
|
"restore_running_app_script": "Ejecutando el guión de restauración de la aplicación «{app:s}»…",
|
||||||
"restore_running_hooks": "Ejecutando los hooks de restauración...",
|
"restore_running_hooks": "Ejecutando los ganchos de restauración…",
|
||||||
"service_add_failed": "No se pudo añadir el servicio '{service:s}'",
|
"service_add_failed": "No se pudo añadir el servicio '{service:s}'",
|
||||||
"service_added": "Servicio '{service:s}' ha sido añadido",
|
"service_added": "Servicio '{service:s}' ha sido añadido",
|
||||||
"service_already_started": "El servicio '{service:s}' ya ha sido inicializado",
|
"service_already_started": "El servicio '{service:s}' ya ha sido inicializado",
|
||||||
|
@ -220,9 +220,9 @@
|
||||||
"unlimit": "Sin cuota",
|
"unlimit": "Sin cuota",
|
||||||
"unrestore_app": "La aplicación '{app:s}' no será restaurada",
|
"unrestore_app": "La aplicación '{app:s}' no será restaurada",
|
||||||
"update_cache_failed": "No se pudo actualizar la caché de APT",
|
"update_cache_failed": "No se pudo actualizar la caché de APT",
|
||||||
"updating_apt_cache": "Actualizando lista de paquetes disponibles...",
|
"updating_apt_cache": "Obteniendo las actualizaciones disponibles para los paquetes del sistema…",
|
||||||
"upgrade_complete": "Actualización finalizada",
|
"upgrade_complete": "Actualización finalizada",
|
||||||
"upgrading_packages": "Actualizando paquetes...",
|
"upgrading_packages": "Actualizando paquetes…",
|
||||||
"upnp_dev_not_found": "No se encontró ningún dispositivo UPnP",
|
"upnp_dev_not_found": "No se encontró ningún dispositivo UPnP",
|
||||||
"upnp_disabled": "UPnP ha sido deshabilitado",
|
"upnp_disabled": "UPnP ha sido deshabilitado",
|
||||||
"upnp_enabled": "UPnP ha sido habilitado",
|
"upnp_enabled": "UPnP ha sido habilitado",
|
||||||
|
@ -239,7 +239,7 @@
|
||||||
"yunohost_already_installed": "YunoHost ya está instalado",
|
"yunohost_already_installed": "YunoHost ya está instalado",
|
||||||
"yunohost_ca_creation_failed": "No se pudo crear el certificado de autoridad",
|
"yunohost_ca_creation_failed": "No se pudo crear el certificado de autoridad",
|
||||||
"yunohost_configured": "YunoHost ha sido configurado",
|
"yunohost_configured": "YunoHost ha sido configurado",
|
||||||
"yunohost_installing": "Instalando YunoHost...",
|
"yunohost_installing": "Instalando YunoHost…",
|
||||||
"yunohost_not_installed": "YunoHost no está instalado o ha habido errores en la instalación. Ejecute 'yunohost tools postinstall'",
|
"yunohost_not_installed": "YunoHost no está instalado o ha habido errores en la instalación. Ejecute 'yunohost tools postinstall'",
|
||||||
"ldap_init_failed_to_create_admin": "La inicialización de LDAP falló al crear el usuario administrador",
|
"ldap_init_failed_to_create_admin": "La inicialización de LDAP falló al crear el usuario administrador",
|
||||||
"mailbox_used_space_dovecot_down": "El servicio de e-mail Dovecot debe estar funcionando si desea obtener el espacio utilizado por el buzón de correo",
|
"mailbox_used_space_dovecot_down": "El servicio de e-mail Dovecot debe estar funcionando si desea obtener el espacio utilizado por el buzón de correo",
|
||||||
|
@ -248,9 +248,9 @@
|
||||||
"certmanager_attempt_to_replace_valid_cert": "Está intentando sobrescribir un certificado correcto y válido para el dominio {domain:s}! (Use --force para omitir este mensaje)",
|
"certmanager_attempt_to_replace_valid_cert": "Está intentando sobrescribir un certificado correcto y válido para el dominio {domain:s}! (Use --force para omitir este mensaje)",
|
||||||
"certmanager_domain_unknown": "Dominio desconocido {domain:s}",
|
"certmanager_domain_unknown": "Dominio desconocido {domain:s}",
|
||||||
"certmanager_domain_cert_not_selfsigned": "El certificado para el dominio {domain:s} no es un certificado autofirmado. ¿Está seguro de que quiere reemplazarlo? (Use --force para omitir este mensaje)",
|
"certmanager_domain_cert_not_selfsigned": "El certificado para el dominio {domain:s} no es un certificado autofirmado. ¿Está seguro de que quiere reemplazarlo? (Use --force para omitir este mensaje)",
|
||||||
"certmanager_certificate_fetching_or_enabling_failed": "Parece que al habilitar el nuevo certificado para el dominio {domain:s} ha fallado de alguna manera...",
|
"certmanager_certificate_fetching_or_enabling_failed": "Suena como que habilitar el nuevo certificado para {domain:s} fallara de algún modo…",
|
||||||
"certmanager_attempt_to_renew_nonLE_cert": "El certificado para el dominio {domain:s} no ha sido emitido por Let's Encrypt. ¡No se puede renovar automáticamente!",
|
"certmanager_attempt_to_renew_nonLE_cert": "El certificado para el dominio {domain:s} no ha sido emitido por Let's Encrypt. ¡No se puede renovar automáticamente!",
|
||||||
"certmanager_attempt_to_renew_valid_cert": "El certificado para el dominio {domain:s} no está a punto de expirar! Utilice --force para omitir este mensaje",
|
"certmanager_attempt_to_renew_valid_cert": "¡El certificado para el dominio {domain:s} no está a punto de expirar! (Puede usar --force si sabe lo que está haciendo)",
|
||||||
"certmanager_domain_http_not_working": "Parece que no se puede acceder al dominio {domain:s} a través de HTTP. Compruebe que la configuración del DNS y de nginx es correcta",
|
"certmanager_domain_http_not_working": "Parece que no se puede acceder al dominio {domain:s} a través de HTTP. Compruebe que la configuración del DNS y de nginx es correcta",
|
||||||
"certmanager_error_no_A_record": "No se ha encontrado un registro DNS 'A' para el dominio {domain:s}. Debe hacer que su nombre de dominio apunte a su máquina para poder instalar un certificado Let's Encrypt. (Si sabe lo que está haciendo, use --no-checks para desactivar esas comprobaciones.)",
|
"certmanager_error_no_A_record": "No se ha encontrado un registro DNS 'A' para el dominio {domain:s}. Debe hacer que su nombre de dominio apunte a su máquina para poder instalar un certificado Let's Encrypt. (Si sabe lo que está haciendo, use --no-checks para desactivar esas comprobaciones.)",
|
||||||
"certmanager_domain_dns_ip_differs_from_public_ip": "El registro DNS 'A' para el dominio {domain:s} es diferente de la IP de este servidor. Si recientemente modificó su registro A, espere a que se propague (existen algunos controladores de propagación DNS disponibles en línea). (Si sabe lo que está haciendo, use --no-checks para desactivar esas comprobaciones.)",
|
"certmanager_domain_dns_ip_differs_from_public_ip": "El registro DNS 'A' para el dominio {domain:s} es diferente de la IP de este servidor. Si recientemente modificó su registro A, espere a que se propague (existen algunos controladores de propagación DNS disponibles en línea). (Si sabe lo que está haciendo, use --no-checks para desactivar esas comprobaciones.)",
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
"certmanager_http_check_timeout": "Plazo expirado, el servidor no ha podido contactarse a si mismo a través de HTTP usando su dirección IP pública (dominio {domain:s} con ip {ip:s}). Puede ser debido a hairpinning o a una mala configuración del cortafuego/router al que está conectado su servidor.",
|
"certmanager_http_check_timeout": "Plazo expirado, el servidor no ha podido contactarse a si mismo a través de HTTP usando su dirección IP pública (dominio {domain:s} con ip {ip:s}). Puede ser debido a hairpinning o a una mala configuración del cortafuego/router al que está conectado su servidor.",
|
||||||
"certmanager_couldnt_fetch_intermediate_cert": "Plazo expirado, no se ha podido descargar el certificado intermedio de Let's Encrypt. La instalación/renovación del certificado ha sido cancelada - vuelva a intentarlo más tarde.",
|
"certmanager_couldnt_fetch_intermediate_cert": "Plazo expirado, no se ha podido descargar el certificado intermedio de Let's Encrypt. La instalación/renovación del certificado ha sido cancelada - vuelva a intentarlo más tarde.",
|
||||||
"appslist_retrieve_bad_format": "El archivo obtenido para la lista de aplicaciones {appslist:s} no es válido",
|
"appslist_retrieve_bad_format": "El archivo obtenido para la lista de aplicaciones {appslist:s} no es válido",
|
||||||
"domain_hostname_failed": "Error al establecer nuevo nombre de host",
|
"domain_hostname_failed": "Error al establecer un nuevo nombre de host («hostname»). Esto podría causar problemas más tarde (no es seguro... podría ir bien).",
|
||||||
"yunohost_ca_creation_success": "Se ha creado la autoridad de certificación local.",
|
"yunohost_ca_creation_success": "Se ha creado la autoridad de certificación local.",
|
||||||
"app_already_installed_cant_change_url": "Esta aplicación ya está instalada. No se puede cambiar el URL únicamente mediante esta función. Compruebe si está disponible la opción 'app changeurl'.",
|
"app_already_installed_cant_change_url": "Esta aplicación ya está instalada. No se puede cambiar el URL únicamente mediante esta función. Compruebe si está disponible la opción 'app changeurl'.",
|
||||||
"app_change_no_change_url_script": "La aplicacion {app_name:s} aún no permite cambiar su URL, es posible que deba actualizarla.",
|
"app_change_no_change_url_script": "La aplicacion {app_name:s} aún no permite cambiar su URL, es posible que deba actualizarla.",
|
||||||
|
@ -285,19 +285,19 @@
|
||||||
"app_already_up_to_date": "La aplicación {app:s} ya está actualizada",
|
"app_already_up_to_date": "La aplicación {app:s} ya está actualizada",
|
||||||
"appslist_name_already_tracked": "Ya existe una lista de aplicaciones registrada con el nombre {name:s}.",
|
"appslist_name_already_tracked": "Ya existe una lista de aplicaciones registrada con el nombre {name:s}.",
|
||||||
"appslist_url_already_tracked": "Ya existe una lista de aplicaciones registrada con el URL {url:s}.",
|
"appslist_url_already_tracked": "Ya existe una lista de aplicaciones registrada con el URL {url:s}.",
|
||||||
"appslist_migrating": "Migrando la lista de aplicaciones {appslist:s} ...",
|
"appslist_migrating": "Migrando la lista de aplicaciones {appslist:s}…",
|
||||||
"appslist_could_not_migrate": "No se pudo migrar la lista de aplicaciones {appslist:s}! No se pudo analizar el URL ... El antiguo cronjob se ha mantenido en {bkp_file:s}.",
|
"appslist_could_not_migrate": "No se pudo migrar la lista de aplicaciones {appslist:s}! No se pudo analizar el URL ... El antiguo cronjob se ha mantenido en {bkp_file:s}.",
|
||||||
"appslist_corrupted_json": "No se pudieron cargar las listas de aplicaciones. Parece que {filename:s} está dañado.",
|
"appslist_corrupted_json": "No se pudieron cargar las listas de aplicaciones. Parece que {filename:s} está dañado.",
|
||||||
"invalid_url_format": "Formato de URL no válido",
|
"invalid_url_format": "Formato de URL no válido",
|
||||||
"app_upgrade_some_app_failed": "No se pudieron actualizar algunas aplicaciones",
|
"app_upgrade_some_app_failed": "No se pudieron actualizar algunas aplicaciones",
|
||||||
"app_make_default_location_already_used": "No puede hacer la aplicación '{app}' por defecto en el dominio {domain} dado que está siendo usado por otra aplicación '{other_app}'",
|
"app_make_default_location_already_used": "No puede hacer la aplicación '{app}' por defecto en el dominio {domain} dado que está siendo usado por otra aplicación '{other_app}'",
|
||||||
"app_upgrade_app_name": "Actualizando la aplicación {app}...",
|
"app_upgrade_app_name": "Actualizando la aplicación {app}…",
|
||||||
"ask_path": "Camino",
|
"ask_path": "Camino",
|
||||||
"backup_abstract_method": "Este método de backup no ha sido implementado aún",
|
"backup_abstract_method": "Este método de backup no ha sido implementado aún",
|
||||||
"backup_applying_method_borg": "Enviando todos los ficheros al backup en el repositorio borg-backup...",
|
"backup_applying_method_borg": "Enviando todos los archivos para la copia de seguridad al repositorio de borg-backup…",
|
||||||
"backup_applying_method_copy": "Copiado todos los ficheros al backup...",
|
"backup_applying_method_copy": "Copiando todos los archivos a la copia de seguridad…",
|
||||||
"backup_applying_method_custom": "Llamando el método de backup {method:s} ...",
|
"backup_applying_method_custom": "Llamando al método de copia de seguridad personalizado «{method:s}»…",
|
||||||
"backup_applying_method_tar": "Creando el archivo tar de backup...",
|
"backup_applying_method_tar": "Creando el archivo tar de la copia de seguridad…",
|
||||||
"backup_archive_mount_failed": "Fallo en el montado del archivo de backup",
|
"backup_archive_mount_failed": "Fallo en el montado del archivo de backup",
|
||||||
"backup_archive_system_part_not_available": "La parte del sistema {part:s} no está disponible en este backup",
|
"backup_archive_system_part_not_available": "La parte del sistema {part:s} no está disponible en este backup",
|
||||||
"backup_archive_writing_error": "No se pueden añadir archivos de backup en el archivo comprimido",
|
"backup_archive_writing_error": "No se pueden añadir archivos de backup en el archivo comprimido",
|
||||||
|
@ -305,7 +305,7 @@
|
||||||
"backup_borg_not_implemented": "Método de backup Borg no está implementado aún",
|
"backup_borg_not_implemented": "Método de backup Borg no está implementado aún",
|
||||||
"backup_cant_mount_uncompress_archive": "No se puede montar en modo solo lectura el directorio del archivo descomprimido",
|
"backup_cant_mount_uncompress_archive": "No se puede montar en modo solo lectura el directorio del archivo descomprimido",
|
||||||
"backup_copying_to_organize_the_archive": "Copiando {size:s}MB para organizar el archivo",
|
"backup_copying_to_organize_the_archive": "Copiando {size:s}MB para organizar el archivo",
|
||||||
"backup_couldnt_bind": "No puede enlazar {src:s} con {dest:s}",
|
"backup_couldnt_bind": "No puede enlazar {src:s} con {dest:s}.",
|
||||||
"backup_csv_addition_failed": "No puede añadir archivos al backup en el archivo CSV",
|
"backup_csv_addition_failed": "No puede añadir archivos al backup en el archivo CSV",
|
||||||
"backup_csv_creation_failed": "No se puede crear el archivo CSV necesario para futuras operaciones de restauración",
|
"backup_csv_creation_failed": "No se puede crear el archivo CSV necesario para futuras operaciones de restauración",
|
||||||
"backup_custom_mount_error": "Fracaso del método de copia de seguridad personalizada en la etapa \"mount\"",
|
"backup_custom_mount_error": "Fracaso del método de copia de seguridad personalizada en la etapa \"mount\"",
|
||||||
|
@ -323,5 +323,286 @@
|
||||||
"password_too_simple_1": "La contraseña debe tener al menos 8 caracteres de longitud",
|
"password_too_simple_1": "La contraseña debe tener al menos 8 caracteres de longitud",
|
||||||
"password_too_simple_2": "La contraseña debe tener al menos 8 caracteres de longitud y contiene dígitos, mayúsculas y minúsculas",
|
"password_too_simple_2": "La contraseña debe tener al menos 8 caracteres de longitud y contiene dígitos, mayúsculas y minúsculas",
|
||||||
"password_too_simple_3": "La contraseña debe tener al menos 8 caracteres de longitud y contiene dígitos, mayúsculas, minúsculas y caracteres especiales",
|
"password_too_simple_3": "La contraseña debe tener al menos 8 caracteres de longitud y contiene dígitos, mayúsculas, minúsculas y caracteres especiales",
|
||||||
"password_too_simple_4": "La contraseña debe tener al menos 12 caracteres de longitud y contiene dígitos, mayúsculas, minúsculas y caracteres especiales"
|
"password_too_simple_4": "La contraseña debe tener al menos 12 caracteres de longitud y contiene dígitos, mayúsculas, minúsculas y caracteres especiales",
|
||||||
|
"users_available": "Usuarios disponibles:",
|
||||||
|
"user_not_in_group": "Usuario {user:s} no está en el grupo {group:s}",
|
||||||
|
"user_already_in_group": "Usuario {user:} ya está en el grupo {group:s}",
|
||||||
|
"updating_app_lists": "Obteniendo actualizaciones disponibles para las aplicaciones…",
|
||||||
|
"update_apt_cache_warning": "Ocurrieron algunos errores durante la actualización de la caché de APT (gestor de paquetes de Debian). Aquí tiene un volcado de las líneas de sources.list que podría ayudarle a identificar las líneas problemáticas:\n{sourceslist}",
|
||||||
|
"update_apt_cache_failed": "No se puede actualizar la caché de APT (gestor de paquetes de Debian). Aquí tiene un volcado de las líneas de sources.list que podría ayudarle a identificar las líneas problemáticas:\n{sourceslist}",
|
||||||
|
"tools_upgrade_special_packages_completed": "¡Actualización de paquetes de YunoHost completada!\nPulse [Intro] para recuperar la línea de órdenes",
|
||||||
|
"tools_upgrade_special_packages_explanation": "Esta acción terminará pero la actualización especial real continuará en segundo plano. No inicie ninguna otra acción en su servidor en aproximadamente 10 minutos (dependiendo de la velocidad de su hardware). Una vez que esté hecho, podría tener que volver a iniciar sesión en la administración web. El registro de actualización estará disponible en Herramientas > Registro (en la administración web) o mediante «yunohost log list» (en la línea de órdenes).",
|
||||||
|
"tools_upgrade_special_packages": "Actualizando ahora paquetes «especiales» (relacionados con YunoHost)...",
|
||||||
|
"tools_upgrade_regular_packages_failed": "No se pueden actualizar los paquetes: {packages_list}",
|
||||||
|
"tools_upgrade_regular_packages": "Actualizando ahora paquetes «normales» (no relacionados con YunoHost)...",
|
||||||
|
"tools_upgrade_cant_unhold_critical_packages": "No se pueden liberar los paquetes críticos...",
|
||||||
|
"tools_upgrade_cant_hold_critical_packages": "No se pueden retener los paquetes críticos...",
|
||||||
|
"tools_upgrade_cant_both": "No se puede actualizar el sistema y las aplicaciones al mismo tiempo",
|
||||||
|
"tools_upgrade_at_least_one": "Especifique --apps O --system",
|
||||||
|
"tools_update_failed_to_app_fetchlist": "Error al actualizar la lista de aplicaciones de YunoHost porque: {error}",
|
||||||
|
"this_action_broke_dpkg": "Esta acción rompió dpkg/apt (los gestores de paquetes del sistema)... Puede tratar de solucionar este problema conectando mediante SSH y ejecutando `sudo dpkg --configure -a`.",
|
||||||
|
"system_groupname_exists": "El nombre de grupo ya existe en el grupo del sistema",
|
||||||
|
"service_reloaded_or_restarted": "El servicio «{service:s}» ha sido recargado o reiniciado",
|
||||||
|
"service_reload_or_restart_failed": "No se puede recargar o reiniciar el servicio «{service:s}»'\n\nRegistro de servicios reciente:{logs:s}",
|
||||||
|
"service_restarted": "El servicio «{service:s}» ha sido reiniciado",
|
||||||
|
"service_restart_failed": "No se puede reiniciar el servicio «{service:s}»'\n\nRegistro de servicios reciente:{logs:s}",
|
||||||
|
"service_reloaded": "El servicio «{service:s}» ha sido recargado",
|
||||||
|
"service_reload_failed": "No se puede recargar el servicio «{service:s}»'\n\nRegistro de servicios reciente:{logs:s}",
|
||||||
|
"service_regen_conf_is_deprecated": "¡«yunohost service regen-conf» está obsoleto! Use «yunohost tools regen-conf» en su lugar.",
|
||||||
|
"service_description_yunohost-firewall": "gestiona los puertos de conexiones abiertos y cerrados a los servicios",
|
||||||
|
"service_description_yunohost-api": "gestiona las interacciones entre la interfaz web de YunoHost y el sistema",
|
||||||
|
"service_description_ssh": "le permite conectar a su servidor remotamente mediante un terminal (protocolo SSH)",
|
||||||
|
"service_description_slapd": "almacena usuarios, dominios e información relacionada",
|
||||||
|
"service_description_rspamd": "filtra correo no deseado y otras características relacionadas con el correo",
|
||||||
|
"service_description_rmilter": "comprueba varios parámetros en el correo",
|
||||||
|
"service_description_redis-server": "una base de datos especializada usada para el acceso rápido de datos, cola de tareas y comunicación entre programas",
|
||||||
|
"service_description_postfix": "usado para enviar y recibir correos",
|
||||||
|
"service_description_php7.0-fpm": "ejecuta aplicaciones escritas en PHP con nginx",
|
||||||
|
"service_description_nslcd": "maneja la conexión del intérprete («shell») de usuario de YunoHost",
|
||||||
|
"service_description_nginx": "sirve o proporciona acceso a todos los sitios web alojados en su servidor",
|
||||||
|
"service_description_mysql": "almacena los datos de las aplicaciones (base de datos SQL)",
|
||||||
|
"service_description_metronome": "gestionar las cuentas XMPP de mensajería instantánea",
|
||||||
|
"service_description_glances": "supervisa la información del sistema en su servidor",
|
||||||
|
"service_description_fail2ban": "protege contra ataques de fuerza bruta y otra clase de ataques desde Internet",
|
||||||
|
"service_description_dovecot": "permite al cliente de correo acceder/traer correo (vía IMAP y POP3)",
|
||||||
|
"service_description_dnsmasq": "maneja la resolución de nombres de dominio (DNS)",
|
||||||
|
"service_description_avahi-daemon": "permite acceder a su servidor usando yunohost.local en su red local",
|
||||||
|
"server_reboot_confirm": "El servidor se reiniciará inmediatamente ¿está seguro? [{answers:s}]",
|
||||||
|
"server_reboot": "El servidor se reiniciará",
|
||||||
|
"server_shutdown_confirm": "El servidor se apagará inmediatamente ¿está seguro? [{answers:s}]",
|
||||||
|
"server_shutdown": "El servidor se apagará",
|
||||||
|
"root_password_replaced_by_admin_password": "Su contraseña de root ha sido sustituida por su contraseña de administración.",
|
||||||
|
"root_password_desynchronized": "La contraseña de administración ha sido cambiada pero ¡YunoHost no pudo propagar esto en la contraseña de root!",
|
||||||
|
"restore_system_part_failed": "No se puede restaurar la parte del sistema «{part:s}»",
|
||||||
|
"restore_removing_tmp_dir_failed": "No se puede eliminar un antiguo directorio temporal",
|
||||||
|
"restore_not_enough_disk_space": "Insuficiente espacio en disco (espacio libre: {free_space:d} B, espacio necesario: {needed_space:d} B, margen de seguridad: {margin:d} B)",
|
||||||
|
"restore_mounting_archive": "Montando archivo en «{path:s}»",
|
||||||
|
"restore_may_be_not_enough_disk_space": "Parece que su sistema no tiene suficiente espacio de disco libre (espacio libre: {free_space:d} B, espacio necesario: {needed_space:d} B, margen de seguridad: {margin:d} B)",
|
||||||
|
"restore_extracting": "Extrayendo los archivos necesarios para el archivo…",
|
||||||
|
"regenconf_pending_applying": "Aplicando la configuración pendiente para la categoría «{category}»…",
|
||||||
|
"regenconf_failed": "No se puede regenerar la configuración para la(s) categoría(s): {categories}",
|
||||||
|
"regenconf_dry_pending_applying": "Comprobando la configuración pendiente que habría sido aplicada para la categoría «{category}»…",
|
||||||
|
"regenconf_would_be_updated": "La configuración habría sido actualizada para la categoría «{category}»",
|
||||||
|
"regenconf_updated": "Ha sido actualizada la configuración para la categoría «{category}»",
|
||||||
|
"regenconf_up_to_date": "Ya está actualizada la configuración para la categoría «{category}»",
|
||||||
|
"regenconf_now_managed_by_yunohost": "El archivo de configuración «{conf}» está gestionado ahora por YunoHost (categoría {category}).",
|
||||||
|
"regenconf_file_updated": "El archivo de configuración «{conf}» ha sido actualizado",
|
||||||
|
"regenconf_file_removed": "El archivo de configuración «{conf}» ha sido eliminado",
|
||||||
|
"regenconf_file_remove_failed": "No se puede eliminar el archivo de configuración «{conf}»",
|
||||||
|
"regenconf_file_manually_removed": "El archivo de configuración «{conf}» ha sido eliminado manualmente y no se creará",
|
||||||
|
"regenconf_file_manually_modified": "El archivo de configuración «{conf}» ha sido modificado manualmente y no será actualizado",
|
||||||
|
"regenconf_file_kept_back": "Se espera que el archivo de configuración «{conf}» sea eliminado por regen-conf (categoría {category}) pero ha sido retenido.",
|
||||||
|
"regenconf_file_copy_failed": "No se puede copiar el nuevo archivo de configuración «{new}» a «{conf}»",
|
||||||
|
"regenconf_file_backed_up": "El archivo de configuración «{conf}» ha sido respaldado en «{backup}»",
|
||||||
|
"remove_user_of_group_not_allowed": "No tiene permiso para eliminar al usuario {user:s} en el grupo {group:s}",
|
||||||
|
"remove_main_permission_not_allowed": "No se permite eliminar el permiso principal",
|
||||||
|
"recommend_to_add_first_user": "La posinstalación ha terminado pero YunoHost necesita al menos un usuario para funcionar correctamente, debe añadir uno ejecutando «yunohost user create <nombredeusuario>» o usando la interfaz de administración.",
|
||||||
|
"permission_update_nothing_to_do": "No hay permisos para actualizar",
|
||||||
|
"permission_updated": "Permiso «{permission:s}» para la aplicación {app:s} actualizado",
|
||||||
|
"permission_generated": "La base de datos de permisos se ha actualizado",
|
||||||
|
"permission_update_failed": "Actualización de permiso fallida",
|
||||||
|
"permission_name_not_valid": "Nombre de permiso «{permission:s}» no válido",
|
||||||
|
"permission_not_found": "Permiso «{permission:s}» no encontrado para la aplicación {app:s}",
|
||||||
|
"permission_deletion_failed": "Permiso «{permission:s}» para eliminar la aplicación «{app:s}» fallido",
|
||||||
|
"permission_deleted": "Eliminado el permiso «{permission:s}» para la aplicación {app:s}",
|
||||||
|
"permission_creation_failed": "Ha fallado la creación del permiso",
|
||||||
|
"permission_created": "Creado el permiso «{permission:s}» para la aplicación {app:s}",
|
||||||
|
"permission_already_exist": "El permiso «{permission:s}» para la aplicación {app:s} ya existe",
|
||||||
|
"permission_already_clear": "El permiso «{permission:s}» ya está definido para la aplicación {app:s}",
|
||||||
|
"pattern_password_app": "Las contraseñas no deben incluir los siguientes caracteres: {forbidden_chars}",
|
||||||
|
"need_define_permission_before": "Necesita redefinir los permisos ejecutando «yunohost user permission add -u USUARIO» antes de eliminar un grupo permitido",
|
||||||
|
"migrations_to_be_ran_manually": "La migración {id} hay que ejecutarla manualmente. Vaya a Herramientas > Migraciones en la web de administración o ejecute `yunohost tools migrations migrate`.",
|
||||||
|
"migrations_success_forward": "¡Migración {id} ejecutada correctamente!",
|
||||||
|
"migrations_skip_migration": "Omitiendo migración {id}…",
|
||||||
|
"migrations_running_forward": "Ejecutando migración {id}…",
|
||||||
|
"migrations_pending_cant_rerun": "Esas migraciones están aún pendientes así que no se pueden volver a ejecutar: {ids}",
|
||||||
|
"migrations_not_pending_cant_skip": "Esas migraciones no están pendientes así que no pueden ser omitidas: {ids}",
|
||||||
|
"migrations_no_such_migration": "No existe una migración llamada {id}",
|
||||||
|
"migrations_no_migrations_to_run": "No hay migraciones que ejecutar",
|
||||||
|
"migrations_need_to_accept_disclaimer": "Para ejecutar la migración {id} debe aceptar el siguiente descargo de responsabilidad:\n---\n{disclaimer}\n---\nSi acepta ejecutar la migración, vuelva a ejecutar la orden con la opción --accept-disclaimer.",
|
||||||
|
"migrations_must_provide_explicit_targets": "Necesita proporcionar objetivos explícitos al usar --skip o --force-rerun",
|
||||||
|
"migrations_migration_has_failed": "Migración {id} fallida, cancelando. Error: {exception}",
|
||||||
|
"migrations_loading_migration": "Cargando migración {id}…",
|
||||||
|
"migrations_list_conflict_pending_done": "No puede usar --previous y --done al mismo tiempo.",
|
||||||
|
"migrations_exclusive_options": "--auto, --skip, and --force-rerun son opciones excluyentes.",
|
||||||
|
"migrations_failed_to_load_migration": "Error al cargar la migración {id} : {error}",
|
||||||
|
"migrations_dependencies_not_satisfied": "No se puede ejecutar la migración {id} porque primero necesita ejecutar estas migraciones: {dependencies_id}",
|
||||||
|
"migrations_cant_reach_migration_file": "No se pueden acceder los archivos de migración en la ruta %s",
|
||||||
|
"migrations_already_ran": "Esas migraciones ya se han ejecutado: {ids}",
|
||||||
|
"migration_0011_update_LDAP_schema": "Actualizando el esquema de LDAP...",
|
||||||
|
"migration_0011_update_LDAP_database": "Actualizando la base de datos de LDAP...",
|
||||||
|
"migration_0011_rollback_success": "Revertido correctamente.",
|
||||||
|
"migration_0011_migration_failed_trying_to_rollback": "Migración fallida... intentando revertir el sistema.",
|
||||||
|
"migration_0011_migrate_permission": "Migrando permisos desde la configuración de las aplicaciones a LDAP...",
|
||||||
|
"migration_0011_LDAP_update_failed": "Actualización de LDAP fallida. Error: {error:s}",
|
||||||
|
"migration_0011_LDAP_config_dirty": "Parece que ha personalizado la configuración de LDAP. Para esta migración se necesita actualizar la configuración de LDAP.\nNecesita guardar su configuración actual, restaurar la configuración original con la orden «yunohost tools regen-conf -f» y reintentar después la migración",
|
||||||
|
"migration_0011_done": "Migración exitosa. Ahora puede gestionar los grupos de usuarios.",
|
||||||
|
"migration_0011_create_group": "Creando un grupo para cada usuario...",
|
||||||
|
"migration_0011_can_not_backup_before_migration": "Falló la copia de seguridad del sistema antes de la migración. Migración fallida. Error: {error:s}",
|
||||||
|
"migration_0011_backup_before_migration": "Creando un respaldo de la base de datos de LDAP y de la configuración de las aplicaciones antes de la migración real.",
|
||||||
|
"migration_0009_not_needed": "¿La migración ya ocurrió de algún modo? Omitiendo.",
|
||||||
|
"migration_0008_no_warning": "No se ha detectado ningún riesgo importante sobre la anulación de su configuración SSH ¡pero no existe una certeza absoluta ;)! Si permite a YunoHost anular su configuración actual, ejecute la migración. Por otra parte puede omitir la migración, aunque no se recomienda.",
|
||||||
|
"migration_0008_warning": "Si entiende esos avisos y permite a YunoHost anular su configuración actual, ejecute la migración. Por otra parte puede omitir la migración, aunque no se recomienda.",
|
||||||
|
"migration_0008_dsa": " - se desactivará la clave DSA. Así que podría tener que anular un aviso espeluznante de su cliente SSH y volver a comprobar la huella de su servidor;",
|
||||||
|
"migration_0008_root": " - no podrá conectarse como «root» a través de SSH. En su lugar debería usar el usuario de administración;",
|
||||||
|
"migration_0008_port": " - tendrá que conectarse usando el puerto 22 en vez de su actual puerto SSH personalizado. No dude en reconfigurarlo;",
|
||||||
|
"migration_0008_general_disclaimer": "Para mejorar la seguridad de su servidor, es recomendable permitir a YunoHost gestionar la configuración SSH. Su actual configuración SSH difiere de la configuración recomendada. Si permite a YunoHost reconfigurarla, la manera en la que conecta con su servidor a través de SSH cambiará en el siguiente modo:",
|
||||||
|
"migration_0007_cannot_restart": "No se puede reiniciar SSH después de intentar cancelar la migración número 6.",
|
||||||
|
"migration_0007_cancelled": "YunoHost no ha podido mejorar el modo en el que se gestiona su configuración de SSH.",
|
||||||
|
"migration_0006_disclaimer": "YunoHost espera ahora que las contraseñas de «admin» y «root» estén sincronizadas. Al ejecutar esta migración, su contraseña de «root» será reemplazada por la contraseña de administración.",
|
||||||
|
"migration_0005_not_enough_space": "No hay suficiente espacio libre disponible en {path} para ejecutar la migración en este momento:(.",
|
||||||
|
"migration_0005_postgresql_96_not_installed": "¿¡Se encontró postgresql 9.4 para ser instalado pero no postgresql 9.6!? Algo raro podría haber ocurrido en su sistema:(…",
|
||||||
|
"migration_0005_postgresql_94_not_installed": "Postgresql no estaba instalado en su sistema. ¡Nada que hacer!",
|
||||||
|
"migration_0003_modified_files": "Tenga en cuenta que se encontró que los siguientes archivos fueron modificados manualmente y podrían ser sobrescritos al final de la actualización: {manually_modified_files}",
|
||||||
|
"migration_0003_problematic_apps_warning": "Tenga en cuenta que se detectaron las siguientes aplicaciones instaladas posiblemente problemáticas. Parece que no fueron instaladas desde una lista de aplicaciones o no estaban etiquetadas como «funciona». Así que no hay garantía de que aún funcionen después de la actualización: {problematic_apps}",
|
||||||
|
"migration_0003_general_warning": "Tenga en cuenta que esta migración es una operación delicada. Aunque el equipo de YunoHost hizo todo lo posible para revisarla y probarla, la migración aún podría romper parte del sistema o de las aplicaciones.\n\nPor lo tanto le recomendamos que:\n - Realice una copia de seguridad de cualquier dato crítico o aplicación. Más información en https://yunohost.org/backup;\n - Tenga paciencia tras iniciar la migración: dependiendo de su conexión a internet y de su hardware, podría tardar unas cuantas horas hasta que todo se actualice.\n\nAdemás, el puerto para SMTP usado por los clientes de correo externos (como Thunderbird o K9-Mail) cambió de 465 (SSL/TLS) a 587 (STARTTLS). El antiguo puerto 465 se cerrará automáticamente y el nuevo puerto 587 se abrirá en el cortafuegos. ¡Todos los usuarios *tendrán* que adaptar la configuración de sus clientes de correo por lo tanto!",
|
||||||
|
"migration_0003_still_on_jessie_after_main_upgrade": "Algo fue mal durante la actualización principal: ¿¡el sistema está aún en Jessie!? Para investigar el problema, vea {log}:s…",
|
||||||
|
"migration_0003_system_not_fully_up_to_date": "Su sistema no está totalmente actualizado. Realice una actualización normal antes de ejecutar la migración a Stretch.",
|
||||||
|
"migration_0003_not_jessie": "¡La distribución de Debian actual no es Jessie!",
|
||||||
|
"migration_0003_yunohost_upgrade": "Iniciando la actualización del paquete «yunohost»… La migración finalizará pero la actualización real ocurrirá justo después. Después de que la operación esté completada, podría tener que reiniciar sesión en la administración web.",
|
||||||
|
"migration_0003_restoring_origin_nginx_conf": "Su archivo /etc/nginx/nginx.conf ha sido editado de algún modo. La migración lo devolverá a su estado original primero… El archivo anterior estará disponible como {backup_dest}.",
|
||||||
|
"migration_0003_fail2ban_upgrade": "Iniciando la actualización de «fail2ban»…",
|
||||||
|
"migration_0003_main_upgrade": "Iniciando la actualización principal…",
|
||||||
|
"migration_0003_patching_sources_list": "Corrigiendo «sources.lists»…",
|
||||||
|
"migration_0003_start": "Iniciando migración a Stretch. El registro estará disponible en {logfile}.",
|
||||||
|
"migration_description_0012_postgresql_password_to_md5_authentication": "Forzar a la autentificación de postgresql a usar md5 para las conexiones locales",
|
||||||
|
"migration_description_0011_setup_group_permission": "Configurar grupo de usuario y configurar permisos para aplicaciones y servicios",
|
||||||
|
"migration_description_0010_migrate_to_apps_json": "Eliminar la obsoleta «appslists» y usar la nueva lista unificada «apps.json»",
|
||||||
|
"migration_description_0009_decouple_regenconf_from_services": "Separar el mecanismo «regen-conf» de los servicios",
|
||||||
|
"migration_description_0008_ssh_conf_managed_by_yunohost_step2": "Permitir que la configuración de SSH la gestione YunoHost (paso 2, manual)",
|
||||||
|
"migration_description_0007_ssh_conf_managed_by_yunohost_step1": "Permitir que la configuración de SSH la gestione YunoHost (paso 1, automático)",
|
||||||
|
"migration_description_0006_sync_admin_and_root_passwords": "Sincronizar las contraseñas de «admin» y «root»",
|
||||||
|
"migration_description_0005_postgresql_9p4_to_9p6": "Migrar las bases de datos de postgresql 9.4 a 9.6",
|
||||||
|
"migration_description_0004_php5_to_php7_pools": "Reconfigurar los «pools» de PHP para usar PHP 7 en vez de 5",
|
||||||
|
"migration_description_0003_migrate_to_stretch": "Actualizar el sistema a Debian Stretch y YunoHost 3.0",
|
||||||
|
"migration_description_0002_migrate_to_tsig_sha256": "Mejorar la seguridad de la TSIG de dyndns usando SHA512 en vez de MD5",
|
||||||
|
"migration_description_0001_change_cert_group_to_sslcert": "Cambiar los permisos de grupo de certificados de «metronome» a «ssl-cert»",
|
||||||
|
"migrate_tsig_not_needed": "Parece que no usa un dominio dyndns ¡así que no es necesario migrar!",
|
||||||
|
"migrate_tsig_wait_4": "30 segundos…",
|
||||||
|
"migrate_tsig_wait_3": "1 min. …",
|
||||||
|
"migrate_tsig_wait_2": "2 min. …",
|
||||||
|
"migrate_tsig_wait": "Esperar 3 min. para que el servidor dyndns tenga en cuenta la nueva clave…",
|
||||||
|
"migrate_tsig_start": "Detectado algoritmo de clave insuficientemente seguro para la firma TSIG del dominio «{domain}», iniciando migración al más seguro hmac-sha512",
|
||||||
|
"migrate_tsig_failed": "Error al migrar el dominio de dyndns {domain} a hmac-sha512, revertiendo. Error: {error_code} - {error}",
|
||||||
|
"migrate_tsig_end": "Terminada la migración a hmac-sha512",
|
||||||
|
"mail_unavailable": "Esta dirección de correo está reservada y será asignada automáticamente al primer usuario",
|
||||||
|
"mailbox_disabled": "Mailbox desactivado para usuario {user:s}",
|
||||||
|
"log_tools_reboot": "Reiniciar el servidor",
|
||||||
|
"log_tools_shutdown": "Apagar el servidor",
|
||||||
|
"log_tools_upgrade": "Actualizar paquetes del sistema",
|
||||||
|
"log_tools_postinstall": "Posinstalación del servidor YunoHost",
|
||||||
|
"log_tools_migrations_migrate_forward": "Migrar hacia adelante",
|
||||||
|
"log_tools_maindomain": "Convertir «{}» en dominio principal",
|
||||||
|
"log_user_permission_remove": "Actualizar permiso «{}»",
|
||||||
|
"log_user_permission_add": "Actualizar permiso «{}»",
|
||||||
|
"log_user_update": "Actualizar información del usuario «{}»",
|
||||||
|
"log_user_group_update": "Actualizar grupo «{}»",
|
||||||
|
"log_user_group_delete": "Eliminar grupo «{}»",
|
||||||
|
"log_user_group_add": "Añadir grupo «{}»",
|
||||||
|
"log_user_delete": "Eliminar usuario «{}»",
|
||||||
|
"log_user_create": "Añadir usuario «{}»",
|
||||||
|
"log_regen_conf": "Regenerar la configuración del sistema «{}»",
|
||||||
|
"log_letsencrypt_cert_renew": "Renovar el certificado «{}» de Let's encrypt",
|
||||||
|
"log_selfsigned_cert_install": "Instalar certificado autofirmado en el dominio «{}»",
|
||||||
|
"log_permission_update": "Actualizar permiso «{}» para la aplicación «{}»",
|
||||||
|
"log_permission_remove": "Eliminar permiso «{}»",
|
||||||
|
"log_permission_add": "Añadir permiso «{}» para la aplicación «{}»",
|
||||||
|
"log_letsencrypt_cert_install": "Instalar certificado de Let's encrypt en el dominio «{}»",
|
||||||
|
"log_dyndns_update": "Actualizar la IP asociada con su subdominio de YunoHost «{}»",
|
||||||
|
"log_dyndns_subscribe": "Subscribirse a un subdomino de YunoHost «{}»",
|
||||||
|
"log_domain_remove": "Eliminar el dominio «{}» de la configuración del sistema",
|
||||||
|
"log_domain_add": "Añadir el dominio «{}» a la configuración del sistema",
|
||||||
|
"log_remove_on_failed_install": "Eliminar «{}» después de una instalación fallida",
|
||||||
|
"log_remove_on_failed_restore": "Eliminar «{}» después de una restauración fallida desde un archivo de respaldo",
|
||||||
|
"log_backup_restore_app": "Restaurar «{}» desde un archivo de respaldo",
|
||||||
|
"log_backup_restore_system": "Restaurar sistema desde un archivo de respaldo",
|
||||||
|
"log_available_on_yunopaste": "Este registro está ahora disponible vía {url}",
|
||||||
|
"log_app_makedefault": "Convertir «{}» en aplicación predeterminada",
|
||||||
|
"log_app_upgrade": "Actualizar la aplicación «{}»",
|
||||||
|
"log_app_remove": "Eliminar la aplicación «{}»",
|
||||||
|
"log_app_install": "Instalar la aplicación «{}»",
|
||||||
|
"log_app_change_url": "Cambiar la url de la aplicación «{}»",
|
||||||
|
"log_app_removelist": "Eliminar una lista de aplicaciones",
|
||||||
|
"log_app_fetchlist": "Añadir una lista de aplicaciones",
|
||||||
|
"log_app_clearaccess": "Eliminar todos los accesos a «{}»",
|
||||||
|
"log_app_removeaccess": "Eliminar acceso a «{}»",
|
||||||
|
"log_app_addaccess": "Añadir acceso a «{}»",
|
||||||
|
"log_operation_unit_unclosed_properly": "La unidad de operación no se ha cerrado correctamente",
|
||||||
|
"log_does_exists": "No existe ningún registro de actividades con el nombre «{log}», ejecute «yunohost log list» para ver todos los registros de actividades disponibles",
|
||||||
|
"log_help_to_get_failed_log": "¡La operación «{desc}» ha fallado! Para obtener ayuda, comparta el registro completo de esta operación ejecutando la orden «yunohost log display {name} --share»",
|
||||||
|
"log_link_to_failed_log": "¡La operación «{desc}» ha fallado! Para obtener ayuda, <a href=\"#/tools/logs/{name}\">proporcione el registro completo de esta operación pulsando aquí</a>",
|
||||||
|
"log_help_to_get_log": "Para ver el registro de la operación «{desc}», ejecute la orden «yunohost log display {name}»",
|
||||||
|
"log_link_to_log": "Registro completo de esta operación: «<a href=\"#/tools/logs/{name}\" style=\"text-decoration:underline\">{desc}</a>»",
|
||||||
|
"log_category_404": "La categoría de registro «{category}» no existe",
|
||||||
|
"log_corrupted_md_file": "El archivo de metadatos yaml asociado con el registro está dañado: «{md_file}\nError: {error}»",
|
||||||
|
"hook_json_return_error": "Error al leer la respuesta del gancho {path:s}. Error: {msg:s}. Contenido sin procesar: {raw_content}",
|
||||||
|
"group_update_failed": "Error en la actualización del grupo «{group}»",
|
||||||
|
"group_updated": "Grupo «{group}» actualizado",
|
||||||
|
"group_unknown": "Grupo {group:s} desconocido",
|
||||||
|
"group_info_failed": "Error en la información del grupo",
|
||||||
|
"group_deletion_not_allowed": "No se puede eliminar el grupo {group:s} manualmente.",
|
||||||
|
"group_deletion_failed": "Error al eliminar el grupo «{group}»",
|
||||||
|
"group_deleted": "Eliminado el grupo «{group}»",
|
||||||
|
"group_creation_failed": "Error al crear el grupo «{group}»",
|
||||||
|
"group_created": "Grupo «{group}» creado correctamente",
|
||||||
|
"group_name_already_exist": "El grupo {name:s} ya existe",
|
||||||
|
"group_already_disallowed": "El grupo '{group:s}' ya tiene desactivado el permiso «{permission:s}» para la aplicación «{app:s}»",
|
||||||
|
"group_already_allowed": "El grupo '{group:s}' ya tiene activado el permiso «{permission:s}» para la aplicación «{app:s}»",
|
||||||
|
"good_practices_about_admin_password": "Va a determinar una nueva contraseña de administración. La contraseña debería tener al menos 8 caracteres, aunque es una buena práctica usar contraseñas más extensas (esto es, una frase) y/o usar caracteres de varias clases (mayúsculas, minúsculas, números y caracteres especiales).",
|
||||||
|
"global_settings_unknown_type": "Situación imprevista, la configuración {setting:s} parece tener el tipo {unknown_type:s} pero no es un tipo compatible con el sistema.",
|
||||||
|
"global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Permitir el uso de la llave (obsoleta) DSA para la configuración del demonio SSH",
|
||||||
|
"global_settings_unknown_setting_from_settings_file": "Clave desconocida en la configuración: «{setting_key:s}», desechada y guardada en /etc/yunohost/settings-unknown.json",
|
||||||
|
"global_settings_setting_security_postfix_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor Postfix. Afecta al cifrado (y otros aspectos relacionados con la seguridad)",
|
||||||
|
"global_settings_setting_security_ssh_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor SSH. Afecta al cifrado (y otros aspectos relacionados con la seguridad)",
|
||||||
|
"global_settings_setting_security_password_user_strength": "Seguridad de la contraseña de usuario",
|
||||||
|
"global_settings_setting_security_password_admin_strength": "Seguridad de la contraseña del administrador",
|
||||||
|
"global_settings_setting_security_nginx_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor web nginx. Afecta al cifrado (y otros aspectos relacionados con la seguridad)",
|
||||||
|
"global_settings_setting_example_string": "Ejemplo de opción de cadena",
|
||||||
|
"global_settings_setting_example_int": "Ejemplo de opción «int»",
|
||||||
|
"global_settings_setting_example_enum": "Ejemplo de opción «enum»",
|
||||||
|
"global_settings_setting_example_bool": "Ejemplo de opción booleana",
|
||||||
|
"global_settings_reset_success": "Éxito. Se ha respaldado su configuración previa en {path:s}",
|
||||||
|
"global_settings_key_doesnt_exists": "La clave «{settings_key:s}» no existe en la configuración global, puede ver todas las claves disponibles ejecutando «yunohost settings list»",
|
||||||
|
"global_settings_cant_write_settings": "Error al escribir el archivo de configuración, motivo: {reason:s}",
|
||||||
|
"global_settings_cant_serialize_settings": "Error al seriar los datos de configuración, motivo: {reason:s}",
|
||||||
|
"global_settings_cant_open_settings": "Error al abrir el archivo de configuración, motivo: {reason:s}",
|
||||||
|
"global_settings_bad_type_for_setting": "Tipo erróneo para la configuración {setting:s}, obtuvo {received_type:s}, excepto {expected_type:s}",
|
||||||
|
"global_settings_bad_choice_for_enum": "Mala elección para la configuración {setting:s}, obtuvo «{choice:s}» pero las opciones disponibles son: {available_choices:s}",
|
||||||
|
"file_does_not_exist": "El archivo {path:s} no existe.",
|
||||||
|
"error_when_removing_sftpuser_group": "Error al probar «remove sftpusers group»",
|
||||||
|
"edit_permission_with_group_all_users_not_allowed": "No puede editar el permiso para el grupo «all_users», utilice «yunohost user permission clear APLICACIÓN» o «yunohost user permission add APLICACIÓN -u USUARIO».",
|
||||||
|
"edit_group_not_allowed": "No tiene permiso para editar el grupo {group:s}",
|
||||||
|
"dyndns_could_not_check_available": "No se pudo comprobar si {domain:s} está disponible en {provider:s}.",
|
||||||
|
"domain_dyndns_dynette_is_unreachable": "No se pudo conectar al dynette de YunoHost, o su YunoHost no está correctamente conectado a internet o el servidor dynette está caído. Error: {error}",
|
||||||
|
"domain_dns_conf_is_just_a_recommendation": "Esta orden muestra cuál es la configuración *recomendada*. No configura el DNS. Es su responsabilidad configurar la zona de DNS en su registrador según esta recomendación.",
|
||||||
|
"dpkg_lock_not_available": "Esta orden no se puede ejecutar en este momento porque otro programa parece que está usando el bloqueo de dpkg (el gestor de paquetes del sistema)",
|
||||||
|
"dpkg_is_broken": "No puede hacer esto en este momento porque dpkg/apt (los gestores de paquetes del sistema) parecen estar en un estado roto... Puede tratar de solucionar este problema conectando a través de SSH y ejecutando `sudo dpkg --configure -a`.",
|
||||||
|
"confirm_app_install_thirdparty": "¡AVISO! Instalar aplicaciones de terceros podría comprometer la integridad y seguridad de su sistema. Probablemente NO debería instalarlas salvo que sepa lo que está haciendo. ¿Está dispuesto a correr ese riesgo? [{answers:s}] ",
|
||||||
|
"confirm_app_install_danger": "¡AVISO! Esta aplicación es aún experimental (si no está funcionando expresamente) y ¡es probable que rompa su sistema! Probablemente NO debería instalarla salvo que sepa lo que está haciendo. ¿Está dispuesto a correr ese riesgo? [{answers:s}] ",
|
||||||
|
"confirm_app_install_warning": "Aviso: esta aplicación puede funcionar pero no está bien integrada en YunoHost. Algunas herramientas como la autentificación única y respaldo/restauración podrían no estar disponibles. ¿Instalar de todos modos? [{answers:s}] ",
|
||||||
|
"backup_unable_to_organize_files": "No se pueden organizar los archivos en el archivo con el método rápido",
|
||||||
|
"backup_permission": "Permiso de respaldo para la aplicación {app:s}",
|
||||||
|
"backup_output_symlink_dir_broken": "Tiene un enlace simbólico roto en vez del directorio «{path:s}» de sus archivos. Puede que tenga una configuración específica para respaldar sus datos en otro sistema de archivos, en este caso probablemente olvidó remontar o conectar su disco duro o clave usb.",
|
||||||
|
"backup_mount_archive_for_restore": "Preparando el archivo para la restauración…",
|
||||||
|
"backup_method_tar_finished": "Creado el archivo de respaldo tar",
|
||||||
|
"backup_method_custom_finished": "Terminado el método «{method:s}» de respaldo personalizado",
|
||||||
|
"backup_method_copy_finished": "Terminada la copia de seguridad",
|
||||||
|
"backup_method_borg_finished": "Terminado el respaldo en borg",
|
||||||
|
"backup_custom_backup_error": "Fallo del método de respaldo personalizado en el paso «copia de seguridad»",
|
||||||
|
"backup_actually_backuping": "Creando un archivo de respaldo de los archivos obtenidos…",
|
||||||
|
"ask_new_path": "Nueva ruta",
|
||||||
|
"ask_new_domain": "Nuevo dominio",
|
||||||
|
"apps_permission_restoration_failed": "El permiso «{permission:s}» para la restauración de la aplicación {app:s} ha fallado",
|
||||||
|
"apps_permission_not_found": "No se han encontrado permisos para las aplicaciones instaladas",
|
||||||
|
"app_upgrade_several_apps": "Las siguientes aplicaciones se actualizarán: {apps}",
|
||||||
|
"app_start_restore": "Restaurando aplicación {app}…",
|
||||||
|
"app_start_backup": "Obteniendo archivos de respaldo para {app}…",
|
||||||
|
"app_start_remove": "Eliminando aplicación {app}…",
|
||||||
|
"app_start_install": "Instalando aplicación {app}…",
|
||||||
|
"app_not_upgraded": "Error al actualizar la aplicación «{failed_app}» y como consecuencia se han cancelado las actualizaciones de las siguientes aplicaciones: {apps}",
|
||||||
|
"app_action_cannot_be_ran_because_required_services_down": "Esta aplicación necesita algunos servicios que no están funcionando ahora. Antes de continuar, debería intentar reiniciar los siguientes servicios (y posiblemente investigar por qué no funcionan): {services}",
|
||||||
|
"already_up_to_date": "¡Nada que hacer! ¡Todo está actualizado!",
|
||||||
|
"admin_password_too_long": "Elija una contraseña de menos de 127 caracteres",
|
||||||
|
"aborting": "Cancelando.",
|
||||||
|
"app_upgrade_stopped": "Se ha detenido la actualización de todas las aplicaciones para prevenir un posible daño porque la aplicación anterior no se pudo actualizar"
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
"done": "Terminé",
|
"done": "Terminé",
|
||||||
"downloading": "Téléchargement en cours …",
|
"downloading": "Téléchargement en cours …",
|
||||||
"dyndns_cron_installed": "La tâche cron pour le domaine DynDNS a été installée",
|
"dyndns_cron_installed": "La tâche cron pour le domaine DynDNS a été installée",
|
||||||
"dyndns_cron_remove_failed": "Impossible de supprimer la tâche cron pour le domaine DynDNS",
|
"dyndns_cron_remove_failed": "Impossible de supprimer la tâche cron DynDNS parce que: {error}",
|
||||||
"dyndns_cron_removed": "La tâche cron pour le domaine DynDNS a été enlevée",
|
"dyndns_cron_removed": "La tâche cron pour le domaine DynDNS a été enlevée",
|
||||||
"dyndns_ip_update_failed": "Impossible de mettre à jour l’adresse IP sur le domaine DynDNS",
|
"dyndns_ip_update_failed": "Impossible de mettre à jour l’adresse IP sur le domaine DynDNS",
|
||||||
"dyndns_ip_updated": "Votre adresse IP a été mise à jour pour le domaine DynDNS",
|
"dyndns_ip_updated": "Votre adresse IP a été mise à jour pour le domaine DynDNS",
|
||||||
|
@ -579,7 +579,7 @@
|
||||||
"group_name_already_exist": "Le groupe {name:s} existe déjà",
|
"group_name_already_exist": "Le groupe {name:s} existe déjà",
|
||||||
"group_creation_failed": "Échec de la création du groupe '{group}'",
|
"group_creation_failed": "Échec de la création du groupe '{group}'",
|
||||||
"group_deletion_failed": "Échec de la suppression du groupe '{group}'",
|
"group_deletion_failed": "Échec de la suppression du groupe '{group}'",
|
||||||
"edit_permission_with_group_all_users_not_allowed": "Vous n'êtes pas autorisé à modifier les permissions pour le groupe 'all_users', utilisez'yunohost user permission clear APP' ou 'yunohost user permission add APP -u USER'.",
|
"edit_permission_with_group_all_users_not_allowed": "Vous n'êtes pas autorisé à modifier les permissions pour le groupe 'all_users', utilisez 'yunohost user permission clear APP' ou 'yunohost user permission add APP -u USER' à la place.",
|
||||||
"log_permission_add": "Ajouter l'autorisation '{}' pour l'application '{}'",
|
"log_permission_add": "Ajouter l'autorisation '{}' pour l'application '{}'",
|
||||||
"log_permission_remove": "Supprimer l'autorisation '{}'",
|
"log_permission_remove": "Supprimer l'autorisation '{}'",
|
||||||
"log_permission_update": "Mise à jour de l'autorisation '{}' pour l'application '{}'",
|
"log_permission_update": "Mise à jour de l'autorisation '{}' pour l'application '{}'",
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
"downloading": "Telecargament…",
|
"downloading": "Telecargament…",
|
||||||
"dyndns_could_not_check_provide": "Impossible de verificar se {provider:s} pòt provesir {domain:s}.",
|
"dyndns_could_not_check_provide": "Impossible de verificar se {provider:s} pòt provesir {domain:s}.",
|
||||||
"dyndns_cron_installed": "La tasca cron pel domeni DynDNS es installada",
|
"dyndns_cron_installed": "La tasca cron pel domeni DynDNS es installada",
|
||||||
"dyndns_cron_remove_failed": "Impossible de levar la tasca cron pel domeni DynDNS",
|
"dyndns_cron_remove_failed": "Impossible de levar la tasca cron pel domeni DynDNS a causa de {error}",
|
||||||
"dyndns_cron_removed": "La tasca cron pel domeni DynDNS es levada",
|
"dyndns_cron_removed": "La tasca cron pel domeni DynDNS es levada",
|
||||||
"dyndns_ip_update_failed": "Impossible d’actualizar l’adreça IP sul domeni DynDNS",
|
"dyndns_ip_update_failed": "Impossible d’actualizar l’adreça IP sul domeni DynDNS",
|
||||||
"dyndns_ip_updated": "Vòstra adreça IP es estada actualizada pel domeni DynDNS",
|
"dyndns_ip_updated": "Vòstra adreça IP es estada actualizada pel domeni DynDNS",
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
"migrations_current_target": "La cibla de migracion est {}",
|
"migrations_current_target": "La cibla de migracion est {}",
|
||||||
"migrations_error_failed_to_load_migration": "ERROR : fracàs del cargament de la migracion {number} {name}",
|
"migrations_error_failed_to_load_migration": "ERROR : fracàs del cargament de la migracion {number} {name}",
|
||||||
"migrations_list_conflict_pending_done": "Podètz pas utilizar --previous e --done a l’encòp.",
|
"migrations_list_conflict_pending_done": "Podètz pas utilizar --previous e --done a l’encòp.",
|
||||||
"migrations_loading_migration": "Cargament de la migracion{number} {name}…",
|
"migrations_loading_migration": "Cargament de la migracion {id}…",
|
||||||
"migrations_no_migrations_to_run": "Cap de migracion de lançar",
|
"migrations_no_migrations_to_run": "Cap de migracion de lançar",
|
||||||
"migrations_show_currently_running_migration": "Realizacion de la migracion {number} {name}…",
|
"migrations_show_currently_running_migration": "Realizacion de la migracion {number} {name}…",
|
||||||
"migrations_show_last_migration": "La darrièra migracion realizada es {}",
|
"migrations_show_last_migration": "La darrièra migracion realizada es {}",
|
||||||
|
@ -376,10 +376,10 @@
|
||||||
"migration_0003_general_warning": "Notatz qu’aquesta migracion es una operacion delicata. Encara que la còla YunoHost aguèsse fach çò melhor per la tornar legir e provar, la migracion poiriá copar de parts del sistèma o de las aplicacions.\n\nEn consequéncia, vos recomandam :\n· · · · - de lançar una salvagarda de vòstras donadas o aplicacions criticas. Mai d’informacions a https://yunohost.org/backup ;\n· · · · - d’èsser pacient aprèp aver lançat la migracion : segon vòstra connexion Internet e material, pòt trigar qualques oras per que tot siá mes al nivèl.\n\nEn mai, lo pòrt per SMTP, utilizat pels clients de corrièls extèrns (coma Thunderbird o K9-Mail per exemple) foguèt cambiat de 465 (SSL/TLS) per 587 (STARTTLS). L’ancian pòrt 465 serà automaticament tampat e lo nòu pòrt 587 serà dobèrt dins lo parafuòc. Vosautres e vòstres utilizaires *auretz* d’adaptar la configuracion de vòstre client de corrièl segon aqueles cambiaments !",
|
"migration_0003_general_warning": "Notatz qu’aquesta migracion es una operacion delicata. Encara que la còla YunoHost aguèsse fach çò melhor per la tornar legir e provar, la migracion poiriá copar de parts del sistèma o de las aplicacions.\n\nEn consequéncia, vos recomandam :\n· · · · - de lançar una salvagarda de vòstras donadas o aplicacions criticas. Mai d’informacions a https://yunohost.org/backup ;\n· · · · - d’èsser pacient aprèp aver lançat la migracion : segon vòstra connexion Internet e material, pòt trigar qualques oras per que tot siá mes al nivèl.\n\nEn mai, lo pòrt per SMTP, utilizat pels clients de corrièls extèrns (coma Thunderbird o K9-Mail per exemple) foguèt cambiat de 465 (SSL/TLS) per 587 (STARTTLS). L’ancian pòrt 465 serà automaticament tampat e lo nòu pòrt 587 serà dobèrt dins lo parafuòc. Vosautres e vòstres utilizaires *auretz* d’adaptar la configuracion de vòstre client de corrièl segon aqueles cambiaments !",
|
||||||
"migration_0003_problematic_apps_warning": "Notatz que las aplicacions seguentas, saique problematicas, son estadas desactivadas. Semblan d’aver estadas installadas d’una lista d’aplicacions o que son pas marcadas coma «working ». En consequéncia, podèm pas assegurar que tendràn de foncionar aprèp la mesa a nivèl : {problematic_apps}",
|
"migration_0003_problematic_apps_warning": "Notatz que las aplicacions seguentas, saique problematicas, son estadas desactivadas. Semblan d’aver estadas installadas d’una lista d’aplicacions o que son pas marcadas coma «working ». En consequéncia, podèm pas assegurar que tendràn de foncionar aprèp la mesa a nivèl : {problematic_apps}",
|
||||||
"migrations_bad_value_for_target": "Nombre invalid pel paramètre « target », los numèros de migracion son 0 o {}",
|
"migrations_bad_value_for_target": "Nombre invalid pel paramètre « target », los numèros de migracion son 0 o {}",
|
||||||
"migrations_migration_has_failed": "La migracion {number} {name} a pas capitat amb l’excepcion {exception}, anullacion",
|
"migrations_migration_has_failed": "La migracion {id} a pas capitat, abandon. Error : {exception}",
|
||||||
"migrations_skip_migration": "Passatge de la migracion {number} {name}…",
|
"migrations_skip_migration": "Passatge de la migracion {id}…",
|
||||||
"migrations_to_be_ran_manually": "La migracion {number} {name} deu èsser lançada manualament. Mercés d’anar a Aisinas > Migracion dins l’interfàcia admin, o lançar « yunohost tools migrations migrate ».",
|
"migrations_to_be_ran_manually": "La migracion {id} deu èsser lançada manualament. Mercés d’anar a Aisinas > Migracion dins l’interfàcia admin, o lançar « yunohost tools migrations migrate ».",
|
||||||
"migrations_need_to_accept_disclaimer": "Per lançar la migracion {number} {name} , avètz d’acceptar aquesta clausa de non-responsabilitat :\n---\n{disclaimer}\n---\nS’acceptatz de lançar la migracion, mercés de tornar executar la comanda amb l’opcion accept-disclaimer.",
|
"migrations_need_to_accept_disclaimer": "Per lançar la migracion {id} , avètz d’acceptar aquesta clausa de non-responsabilitat :\n---\n{disclaimer}\n---\nS’acceptatz de lançar la migracion, mercés de tornar executar la comanda amb l’opcion accept-disclaimer.",
|
||||||
"monitor_disabled": "La supervision del servidor es desactivada",
|
"monitor_disabled": "La supervision del servidor es desactivada",
|
||||||
"monitor_enabled": "La supervision del servidor es activada",
|
"monitor_enabled": "La supervision del servidor es activada",
|
||||||
"mysql_db_initialized": "La basa de donadas MySQL es estada inicializada",
|
"mysql_db_initialized": "La basa de donadas MySQL es estada inicializada",
|
||||||
|
@ -453,7 +453,7 @@
|
||||||
"migration_0005_postgresql_94_not_installed": "Postgresql es pas installat sul sistèma. Pas res de far !",
|
"migration_0005_postgresql_94_not_installed": "Postgresql es pas installat sul sistèma. Pas res de far !",
|
||||||
"migration_0005_postgresql_96_not_installed": "Avèm trobat que Postgresql 9.4 es installat, mas cap de version de Postgresql 9.6 pas trobada !? Quicòm d’estranh a degut arribar a vòstre sistèma :( …",
|
"migration_0005_postgresql_96_not_installed": "Avèm trobat que Postgresql 9.4 es installat, mas cap de version de Postgresql 9.6 pas trobada !? Quicòm d’estranh a degut arribar a vòstre sistèma :( …",
|
||||||
"migration_0005_not_enough_space": "I a pas pro d’espaci disponible sus {path} per lançar la migracion d’aquela passa :(.",
|
"migration_0005_not_enough_space": "I a pas pro d’espaci disponible sus {path} per lançar la migracion d’aquela passa :(.",
|
||||||
"recommend_to_add_first_user": "La post installacion es acabada, mas YunoHost fa besonh d’almens un utilizaire per foncionar coma cal. Vos cal n’ajustar un en utilizant la comanda « yunohost user create $username » o ben l’interfàcia d’administracion.",
|
"recommend_to_add_first_user": "La post installacion es acabada, mas YunoHost fa besonh d’almens un utilizaire per foncionar coma cal. Vos cal n’ajustar un en utilizant la comanda « yunohost user create <username>' » o ben l’interfàcia d’administracion.",
|
||||||
"service_description_php7.0-fpm": "executa d’aplicacions escrichas en PHP amb nginx",
|
"service_description_php7.0-fpm": "executa d’aplicacions escrichas en PHP amb nginx",
|
||||||
"users_available": "Lista dels utilizaires disponibles :",
|
"users_available": "Lista dels utilizaires disponibles :",
|
||||||
"good_practices_about_admin_password": "Sètz per definir un nòu senhal per l’administracion. Lo senhal deu almens conténer 8 caractèrs - encara que siá de bon far d’utilizar un senhal mai long qu’aquò (ex. una passafrasa) e/o d’utilizar mantun tipes de caractèrs (majuscula, minuscula, nombre e caractèrs especials).",
|
"good_practices_about_admin_password": "Sètz per definir un nòu senhal per l’administracion. Lo senhal deu almens conténer 8 caractèrs - encara que siá de bon far d’utilizar un senhal mai long qu’aquò (ex. una passafrasa) e/o d’utilizar mantun tipes de caractèrs (majuscula, minuscula, nombre e caractèrs especials).",
|
||||||
|
@ -468,7 +468,7 @@
|
||||||
"password_too_simple_4": "Lo senhal deu conténer almens 12 caractèrs, de nombre, majusculas, minisculas e caractèrs specials",
|
"password_too_simple_4": "Lo senhal deu conténer almens 12 caractèrs, de nombre, majusculas, minisculas e caractèrs specials",
|
||||||
"root_password_desynchronized": "Lo senhal de l’administrator es estat cambiat, mas YunoHost a pas pogut l’espandir al senhal root !",
|
"root_password_desynchronized": "Lo senhal de l’administrator es estat cambiat, mas YunoHost a pas pogut l’espandir al senhal root !",
|
||||||
"aborting": "Interrupcion.",
|
"aborting": "Interrupcion.",
|
||||||
"app_not_upgraded": "Las aplicacions seguentas son pas estadas actualizadas : {apps}",
|
"app_not_upgraded": "L’aplicacion « {failed_app} » a pas reüssit a s’actualizar e coma consequéncia las mesas a jorn de las aplicacions seguentas son estadas anulladas : {apps}",
|
||||||
"app_start_install": "Installacion de l’aplicacion {app}…",
|
"app_start_install": "Installacion de l’aplicacion {app}…",
|
||||||
"app_start_remove": "Supression de l’aplicacion {app}…",
|
"app_start_remove": "Supression de l’aplicacion {app}…",
|
||||||
"app_start_backup": "Recuperacion dels fichièrs de salvagardar per {app}…",
|
"app_start_backup": "Recuperacion dels fichièrs de salvagardar per {app}…",
|
||||||
|
@ -604,5 +604,13 @@
|
||||||
"edit_permission_with_group_all_users_not_allowed": "Podètz pas modificar las permissions del grop « all_users », utilizatz « yunohost user permission clear APP » o « yunohost user permission add APP -u USER ».",
|
"edit_permission_with_group_all_users_not_allowed": "Podètz pas modificar las permissions del grop « all_users », utilizatz « yunohost user permission clear APP » o « yunohost user permission add APP -u USER ».",
|
||||||
"mailbox_disabled": "La bóstia de las letras es desactivada per l’utilizaire {user:s}",
|
"mailbox_disabled": "La bóstia de las letras es desactivada per l’utilizaire {user:s}",
|
||||||
"migration_0011_LDAP_config_dirty": "Sembla qu’avètz modificat manualament la configuracion LDAP. Per far aquesta migracion cal actualizar la configuracion LDAP.\nSalvagardatz la configuracion actuala, reïnicializatz la configuracion originala amb la comanda « yunohost tools regen-conf -f » e tornatz ensajar la migracion",
|
"migration_0011_LDAP_config_dirty": "Sembla qu’avètz modificat manualament la configuracion LDAP. Per far aquesta migracion cal actualizar la configuracion LDAP.\nSalvagardatz la configuracion actuala, reïnicializatz la configuracion originala amb la comanda « yunohost tools regen-conf -f » e tornatz ensajar la migracion",
|
||||||
"need_define_permission_before": "Vos cal tornar definir las permission en utilizant « yunohost user permission add -u USER » abans de suprimir un grop permés"
|
"need_define_permission_before": "Vos cal tornar definir las permission en utilizant « yunohost user permission add -u USER » abans de suprimir un grop permés",
|
||||||
|
"permission_already_clear": "La permission « {permission:s} » ja levada per l’aplicacion {app:s}",
|
||||||
|
"migration_description_0012_postgresql_password_to_md5_authentication": "Forçar l’autentificacion postgresql a utilizar md5 per las connexions localas",
|
||||||
|
"migrations_success_forward": "Migracion {id} corrèctament realizada !",
|
||||||
|
"migrations_running_forward": "Execucion de la migracion {id}…",
|
||||||
|
"migrations_must_provide_explicit_targets": "Devètz fornir una cibla explicita quand utilizatz using --skip o --force-rerun",
|
||||||
|
"migrations_exclusive_options": "--auto, --skip, e --force-rerun son las opcions exclusivas.",
|
||||||
|
"migrations_failed_to_load_migration": "Cargament impossible de la migracion {id} : {error}",
|
||||||
|
"migrations_already_ran": "Aquelas migracions s’executèron ja : {ids}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -580,15 +580,9 @@ def app_upgrade(app=[], url=None, file=None):
|
||||||
url -- Git url to fetch for upgrade
|
url -- Git url to fetch for upgrade
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if packages.dpkg_is_broken():
|
|
||||||
raise YunohostError("dpkg_is_broken")
|
|
||||||
|
|
||||||
from yunohost.hook import hook_add, hook_remove, hook_exec, hook_callback
|
from yunohost.hook import hook_add, hook_remove, hook_exec, hook_callback
|
||||||
from yunohost.permission import permission_sync_to_user
|
from yunohost.permission import permission_sync_to_user
|
||||||
|
|
||||||
# Retrieve interface
|
|
||||||
is_api = msettings.get('interface') == 'api'
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
app_list()
|
app_list()
|
||||||
except YunohostError:
|
except YunohostError:
|
||||||
|
@ -617,12 +611,15 @@ def app_upgrade(app=[], url=None, file=None):
|
||||||
if len(apps) > 1:
|
if len(apps) > 1:
|
||||||
logger.info(m18n.n("app_upgrade_several_apps", apps=", ".join(apps)))
|
logger.info(m18n.n("app_upgrade_several_apps", apps=", ".join(apps)))
|
||||||
|
|
||||||
for app_instance_name in apps:
|
for number, app_instance_name in enumerate(apps):
|
||||||
logger.info(m18n.n('app_upgrade_app_name', app=app_instance_name))
|
logger.info(m18n.n('app_upgrade_app_name', app=app_instance_name))
|
||||||
|
|
||||||
app_dict = app_info(app_instance_name, raw=True)
|
app_dict = app_info(app_instance_name, raw=True)
|
||||||
|
|
||||||
if file:
|
if file and isinstance(file, dict):
|
||||||
|
# We use this dirty hack to test chained upgrades in unit/functional tests
|
||||||
|
manifest, extracted_app_folder = _extract_app_from_file(file[app_instance_name])
|
||||||
|
elif file:
|
||||||
manifest, extracted_app_folder = _extract_app_from_file(file)
|
manifest, extracted_app_folder = _extract_app_from_file(file)
|
||||||
elif url:
|
elif url:
|
||||||
manifest, extracted_app_folder = _fetch_app_from_git(url)
|
manifest, extracted_app_folder = _fetch_app_from_git(url)
|
||||||
|
@ -637,7 +634,7 @@ def app_upgrade(app=[], url=None, file=None):
|
||||||
|
|
||||||
# Check requirements
|
# Check requirements
|
||||||
_check_manifest_requirements(manifest, app_instance_name=app_instance_name)
|
_check_manifest_requirements(manifest, app_instance_name=app_instance_name)
|
||||||
_check_services_status_for_app(manifest.get("services", []))
|
_assert_system_is_sane_for_app(manifest, "pre")
|
||||||
|
|
||||||
app_setting_path = APPS_SETTING_PATH + '/' + app_instance_name
|
app_setting_path = APPS_SETTING_PATH + '/' + app_instance_name
|
||||||
|
|
||||||
|
@ -668,48 +665,83 @@ def app_upgrade(app=[], url=None, file=None):
|
||||||
|
|
||||||
# Execute App upgrade script
|
# Execute App upgrade script
|
||||||
os.system('chown -hR admin: %s' % INSTALL_TMP)
|
os.system('chown -hR admin: %s' % INSTALL_TMP)
|
||||||
if hook_exec(extracted_app_folder + '/scripts/upgrade',
|
|
||||||
args=args_list, env=env_dict)[0] != 0:
|
|
||||||
msg = m18n.n('app_upgrade_failed', app=app_instance_name)
|
|
||||||
not_upgraded_apps.append(app_instance_name)
|
|
||||||
logger.error(msg)
|
|
||||||
operation_logger.error(msg)
|
|
||||||
else:
|
|
||||||
now = int(time.time())
|
|
||||||
# TODO: Move install_time away from app_setting
|
|
||||||
app_setting(app_instance_name, 'update_time', now)
|
|
||||||
status['upgraded_at'] = now
|
|
||||||
|
|
||||||
# Clean hooks and add new ones
|
try:
|
||||||
hook_remove(app_instance_name)
|
upgrade_retcode = hook_exec(extracted_app_folder + '/scripts/upgrade',
|
||||||
if 'hooks' in os.listdir(extracted_app_folder):
|
args=args_list, env=env_dict)[0]
|
||||||
for hook in os.listdir(extracted_app_folder + '/hooks'):
|
except (KeyboardInterrupt, EOFError):
|
||||||
hook_add(app_instance_name, extracted_app_folder + '/hooks/' + hook)
|
upgrade_retcode = -1
|
||||||
|
except Exception:
|
||||||
|
import traceback
|
||||||
|
logger.exception(m18n.n('unexpected_error', error=u"\n" + traceback.format_exc()))
|
||||||
|
finally:
|
||||||
|
|
||||||
# Store app status
|
# Did the script succeed ?
|
||||||
with open(app_setting_path + '/status.json', 'w+') as f:
|
if upgrade_retcode == -1:
|
||||||
json.dump(status, f)
|
error_msg = m18n.n('operation_interrupted')
|
||||||
|
operation_logger.error(error_msg)
|
||||||
|
elif upgrade_retcode != 0:
|
||||||
|
error_msg = m18n.n('app_upgrade_failed', app=app_instance_name)
|
||||||
|
operation_logger.error(error_msg)
|
||||||
|
|
||||||
# Replace scripts and manifest and conf (if exists)
|
# Did it broke the system ?
|
||||||
os.system('rm -rf "%s/scripts" "%s/manifest.toml %s/manifest.json %s/conf"' % (app_setting_path, app_setting_path, app_setting_path, app_setting_path))
|
try:
|
||||||
|
broke_the_system = False
|
||||||
|
_assert_system_is_sane_for_app(manifest, "post")
|
||||||
|
except Exception as e:
|
||||||
|
broke_the_system = True
|
||||||
|
error_msg = operation_logger.error(str(e))
|
||||||
|
|
||||||
if os.path.exists(os.path.join(extracted_app_folder, "manifest.json")):
|
# If upgrade failed or broke the system,
|
||||||
os.system('mv "%s/manifest.json" "%s/scripts" %s' % (extracted_app_folder, extracted_app_folder, app_setting_path))
|
# raise an error and interrupt all other pending upgrades
|
||||||
if os.path.exists(os.path.join(extracted_app_folder, "manifest.toml")):
|
if upgrade_retcode != 0 or broke_the_system:
|
||||||
os.system('mv "%s/manifest.toml" "%s/scripts" %s' % (extracted_app_folder, extracted_app_folder, app_setting_path))
|
|
||||||
|
|
||||||
for file_to_copy in ["actions.json", "actions.toml", "config_panel.json", "config_panel.toml", "conf"]:
|
# display this if there are remaining apps
|
||||||
if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)):
|
if apps[number + 1:]:
|
||||||
os.system('cp -R %s/%s %s' % (extracted_app_folder, file_to_copy, app_setting_path))
|
logger.error(m18n.n('app_upgrade_stopped'))
|
||||||
|
not_upgraded_apps = apps[number:]
|
||||||
|
# we don't want to continue upgrading apps here in case that breaks
|
||||||
|
# everything
|
||||||
|
raise YunohostError('app_not_upgraded',
|
||||||
|
failed_app=app_instance_name,
|
||||||
|
apps=', '.join(not_upgraded_apps))
|
||||||
|
else:
|
||||||
|
raise YunohostError(error_msg, raw_msg=True)
|
||||||
|
|
||||||
# So much win
|
# Otherwise we're good and keep going !
|
||||||
logger.success(m18n.n('app_upgraded', app=app_instance_name))
|
else:
|
||||||
|
now = int(time.time())
|
||||||
|
# TODO: Move install_time away from app_setting
|
||||||
|
app_setting(app_instance_name, 'update_time', now)
|
||||||
|
status['upgraded_at'] = now
|
||||||
|
|
||||||
hook_callback('post_app_upgrade', args=args_list, env=env_dict)
|
# Clean hooks and add new ones
|
||||||
operation_logger.success()
|
hook_remove(app_instance_name)
|
||||||
|
if 'hooks' in os.listdir(extracted_app_folder):
|
||||||
|
for hook in os.listdir(extracted_app_folder + '/hooks'):
|
||||||
|
hook_add(app_instance_name, extracted_app_folder + '/hooks/' + hook)
|
||||||
|
|
||||||
if not_upgraded_apps:
|
# Store app status
|
||||||
raise YunohostError('app_not_upgraded', apps=', '.join(not_upgraded_apps))
|
with open(app_setting_path + '/status.json', 'w+') as f:
|
||||||
|
json.dump(status, f)
|
||||||
|
|
||||||
|
# Replace scripts and manifest and conf (if exists)
|
||||||
|
os.system('rm -rf "%s/scripts" "%s/manifest.toml %s/manifest.json %s/conf"' % (app_setting_path, app_setting_path, app_setting_path, app_setting_path))
|
||||||
|
|
||||||
|
if os.path.exists(os.path.join(extracted_app_folder, "manifest.json")):
|
||||||
|
os.system('mv "%s/manifest.json" "%s/scripts" %s' % (extracted_app_folder, extracted_app_folder, app_setting_path))
|
||||||
|
if os.path.exists(os.path.join(extracted_app_folder, "manifest.toml")):
|
||||||
|
os.system('mv "%s/manifest.toml" "%s/scripts" %s' % (extracted_app_folder, extracted_app_folder, app_setting_path))
|
||||||
|
|
||||||
|
for file_to_copy in ["actions.json", "actions.toml", "config_panel.json", "config_panel.toml", "conf"]:
|
||||||
|
if os.path.exists(os.path.join(extracted_app_folder, file_to_copy)):
|
||||||
|
os.system('cp -R %s/%s %s' % (extracted_app_folder, file_to_copy, app_setting_path))
|
||||||
|
|
||||||
|
# So much win
|
||||||
|
logger.success(m18n.n('app_upgraded', app=app_instance_name))
|
||||||
|
|
||||||
|
hook_callback('post_app_upgrade', args=args_list, env=env_dict)
|
||||||
|
operation_logger.success()
|
||||||
|
|
||||||
permission_sync_to_user()
|
permission_sync_to_user()
|
||||||
|
|
||||||
|
@ -728,8 +760,6 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
no_remove_on_failure -- Debug option to avoid removing the app on a failed installation
|
no_remove_on_failure -- Debug option to avoid removing the app on a failed installation
|
||||||
force -- Do not ask for confirmation when installing experimental / low-quality apps
|
force -- Do not ask for confirmation when installing experimental / low-quality apps
|
||||||
"""
|
"""
|
||||||
if packages.dpkg_is_broken():
|
|
||||||
raise YunohostError("dpkg_is_broken")
|
|
||||||
|
|
||||||
from yunohost.hook import hook_add, hook_remove, hook_exec, hook_callback
|
from yunohost.hook import hook_add, hook_remove, hook_exec, hook_callback
|
||||||
from yunohost.log import OperationLogger
|
from yunohost.log import OperationLogger
|
||||||
|
@ -791,7 +821,7 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
|
|
||||||
# Check requirements
|
# Check requirements
|
||||||
_check_manifest_requirements(manifest, app_id)
|
_check_manifest_requirements(manifest, app_id)
|
||||||
_check_services_status_for_app(manifest.get("services", []))
|
_assert_system_is_sane_for_app(manifest, "pre")
|
||||||
|
|
||||||
# Check if app can be forked
|
# Check if app can be forked
|
||||||
instance_number = _installed_instance_number(app_id, last=True) + 1
|
instance_number = _installed_instance_number(app_id, last=True) + 1
|
||||||
|
@ -884,8 +914,17 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
import traceback
|
import traceback
|
||||||
logger.exception(m18n.n('unexpected_error', error=u"\n" + traceback.format_exc()))
|
logger.exception(m18n.n('unexpected_error', error=u"\n" + traceback.format_exc()))
|
||||||
finally:
|
finally:
|
||||||
|
try:
|
||||||
|
broke_the_system = False
|
||||||
|
_assert_system_is_sane_for_app(manifest, "post")
|
||||||
|
except Exception as e:
|
||||||
|
broke_the_system = True
|
||||||
|
error_msg = operation_logger.error(str(e))
|
||||||
|
|
||||||
if install_retcode != 0:
|
if install_retcode != 0:
|
||||||
error_msg = operation_logger.error(m18n.n('unexpected_error', error='shell command return code: %s' % install_retcode))
|
error_msg = operation_logger.error(m18n.n('unexpected_error', error='shell command return code: %s' % install_retcode))
|
||||||
|
|
||||||
|
if install_retcode != 0 or broke_the_system:
|
||||||
if not no_remove_on_failure:
|
if not no_remove_on_failure:
|
||||||
# Setup environment for remove script
|
# Setup environment for remove script
|
||||||
env_dict_remove = {}
|
env_dict_remove = {}
|
||||||
|
@ -914,7 +953,12 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
logger.warning(msg)
|
logger.warning(msg)
|
||||||
operation_logger_remove.error(msg)
|
operation_logger_remove.error(msg)
|
||||||
else:
|
else:
|
||||||
operation_logger_remove.success()
|
try:
|
||||||
|
_assert_system_is_sane_for_app(manifest, "post")
|
||||||
|
except Exception as e:
|
||||||
|
operation_logger_remove.error(e)
|
||||||
|
else:
|
||||||
|
operation_logger_remove.success()
|
||||||
|
|
||||||
# Clean tmp folders
|
# Clean tmp folders
|
||||||
shutil.rmtree(app_setting_path)
|
shutil.rmtree(app_setting_path)
|
||||||
|
@ -922,9 +966,6 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
|
|
||||||
app_ssowatconf()
|
app_ssowatconf()
|
||||||
|
|
||||||
if packages.dpkg_is_broken():
|
|
||||||
logger.error(m18n.n("this_action_broke_dpkg"))
|
|
||||||
|
|
||||||
if install_retcode == -1:
|
if install_retcode == -1:
|
||||||
msg = m18n.n('operation_interrupted') + " " + error_msg
|
msg = m18n.n('operation_interrupted') + " " + error_msg
|
||||||
raise YunohostError(msg, raw_msg=True)
|
raise YunohostError(msg, raw_msg=True)
|
||||||
|
@ -990,6 +1031,8 @@ def app_remove(operation_logger, app):
|
||||||
# script might date back from jessie install)
|
# script might date back from jessie install)
|
||||||
_patch_php5(app_setting_path)
|
_patch_php5(app_setting_path)
|
||||||
|
|
||||||
|
manifest = _get_manifest_of_app(app_setting_path)
|
||||||
|
|
||||||
os.system('cp -a %s /tmp/yunohost_remove && chown -hR admin: /tmp/yunohost_remove' % app_setting_path)
|
os.system('cp -a %s /tmp/yunohost_remove && chown -hR admin: /tmp/yunohost_remove' % app_setting_path)
|
||||||
os.system('chown -R admin: /tmp/yunohost_remove')
|
os.system('chown -R admin: /tmp/yunohost_remove')
|
||||||
os.system('chmod -R u+rX /tmp/yunohost_remove')
|
os.system('chmod -R u+rX /tmp/yunohost_remove')
|
||||||
|
@ -1021,9 +1064,7 @@ def app_remove(operation_logger, app):
|
||||||
permission_delete(permission_name, force=True, sync_perm=False)
|
permission_delete(permission_name, force=True, sync_perm=False)
|
||||||
|
|
||||||
permission_sync_to_user()
|
permission_sync_to_user()
|
||||||
|
_assert_system_is_sane_for_app(manifest, "post")
|
||||||
if packages.dpkg_is_broken():
|
|
||||||
raise YunohostError("this_action_broke_dpkg")
|
|
||||||
|
|
||||||
|
|
||||||
def app_addaccess(apps, users=[]):
|
def app_addaccess(apps, users=[]):
|
||||||
|
@ -2892,10 +2933,12 @@ def unstable_apps():
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
def _check_services_status_for_app(services):
|
def _assert_system_is_sane_for_app(manifest, when):
|
||||||
|
|
||||||
logger.debug("Checking that required services are up and running...")
|
logger.debug("Checking that required services are up and running...")
|
||||||
|
|
||||||
|
services = manifest.get("services", [])
|
||||||
|
|
||||||
# Some apps use php-fpm or php5-fpm which is now php7.0-fpm
|
# Some apps use php-fpm or php5-fpm which is now php7.0-fpm
|
||||||
def replace_alias(service):
|
def replace_alias(service):
|
||||||
if service in ["php-fpm", "php5-fpm"]:
|
if service in ["php-fpm", "php5-fpm"]:
|
||||||
|
@ -2910,11 +2953,26 @@ def _check_services_status_for_app(services):
|
||||||
service_filter = ["nginx", "php7.0-fpm", "mysql", "postfix"]
|
service_filter = ["nginx", "php7.0-fpm", "mysql", "postfix"]
|
||||||
services = [str(s) for s in services if s in service_filter]
|
services = [str(s) for s in services if s in service_filter]
|
||||||
|
|
||||||
|
if "nginx" not in services:
|
||||||
|
services = ["nginx"] + services
|
||||||
|
if "fail2ban" not in services:
|
||||||
|
services.append("fail2ban")
|
||||||
|
|
||||||
# List services currently down and raise an exception if any are found
|
# List services currently down and raise an exception if any are found
|
||||||
faulty_services = [s for s in services if service_status(s)["active"] != "active"]
|
faulty_services = [s for s in services if service_status(s)["active"] != "active"]
|
||||||
if faulty_services:
|
if faulty_services:
|
||||||
raise YunohostError('app_action_cannot_be_ran_because_required_services_down',
|
if when == "pre":
|
||||||
services=', '.join(faulty_services))
|
raise YunohostError('app_action_cannot_be_ran_because_required_services_down',
|
||||||
|
services=', '.join(faulty_services))
|
||||||
|
elif when == "post":
|
||||||
|
raise YunohostError('app_action_broke_system',
|
||||||
|
services=', '.join(faulty_services))
|
||||||
|
|
||||||
|
if packages.dpkg_is_broken():
|
||||||
|
if when == "pre":
|
||||||
|
raise YunohostError("dpkg_is_broken")
|
||||||
|
elif when == "post":
|
||||||
|
raise YunohostError("this_action_broke_dpkg")
|
||||||
|
|
||||||
|
|
||||||
def _patch_php5(app_folder):
|
def _patch_php5(app_folder):
|
||||||
|
|
|
@ -41,11 +41,11 @@ def pytest_cmdline_main(config):
|
||||||
root_handlers = set(handlers)
|
root_handlers = set(handlers)
|
||||||
|
|
||||||
# Define loggers level
|
# Define loggers level
|
||||||
level = 'INFO'
|
level = 'DEBUG'
|
||||||
if config.option.yunodebug:
|
if config.option.yunodebug:
|
||||||
tty_level = 'DEBUG'
|
tty_level = 'DEBUG'
|
||||||
else:
|
else:
|
||||||
tty_level = 'SUCCESS'
|
tty_level = 'INFO'
|
||||||
|
|
||||||
# Custom logging configuration
|
# Custom logging configuration
|
||||||
logging = {
|
logging = {
|
||||||
|
|
321
src/yunohost/tests/test_apps.py
Normal file
321
src/yunohost/tests/test_apps.py
Normal file
|
@ -0,0 +1,321 @@
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
import shutil
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from moulinette import m18n
|
||||||
|
from moulinette.utils.filesystem import mkdir
|
||||||
|
|
||||||
|
from yunohost.app import app_install, app_remove, app_ssowatconf, _is_installed, app_upgrade
|
||||||
|
from yunohost.domain import _get_maindomain, domain_add, domain_remove, domain_list
|
||||||
|
from yunohost.utils.error import YunohostError
|
||||||
|
from yunohost.tests.test_permission import check_LDAP_db_integrity, check_permission_for_apps
|
||||||
|
|
||||||
|
|
||||||
|
def setup_function(function):
|
||||||
|
|
||||||
|
clean()
|
||||||
|
|
||||||
|
def teardown_function(function):
|
||||||
|
|
||||||
|
clean()
|
||||||
|
|
||||||
|
def clean():
|
||||||
|
|
||||||
|
# Make sure we have a ssowat
|
||||||
|
os.system("mkdir -p /etc/ssowat/")
|
||||||
|
app_ssowatconf()
|
||||||
|
|
||||||
|
# Gotta first remove break yo system
|
||||||
|
# because some remaining stuff might
|
||||||
|
# make the other app_remove crashs ;P
|
||||||
|
if _is_installed("break_yo_system"):
|
||||||
|
app_remove("break_yo_system")
|
||||||
|
|
||||||
|
if _is_installed("legacy_app"):
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
to_remove = []
|
||||||
|
to_remove += glob.glob("/etc/nginx/conf.d/*.d/*legacy*")
|
||||||
|
to_remove += glob.glob("/etc/nginx/conf.d/*.d/*break_yo_system*")
|
||||||
|
for filepath in to_remove:
|
||||||
|
os.remove(filepath)
|
||||||
|
|
||||||
|
to_remove = []
|
||||||
|
to_remove += glob.glob("/etc/yunohost/apps/*legacy_app*")
|
||||||
|
to_remove += glob.glob("/etc/yunohost/apps/*break_yo_system*")
|
||||||
|
to_remove += glob.glob("/var/www/*legacy*")
|
||||||
|
for folderpath in to_remove:
|
||||||
|
shutil.rmtree(folderpath, ignore_errors=True)
|
||||||
|
|
||||||
|
os.system("systemctl reset-failed nginx") # Reset failed quota for service to avoid running into start-limit rate ?
|
||||||
|
os.system("systemctl start nginx")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def check_LDAP_db_integrity_call():
|
||||||
|
check_LDAP_db_integrity()
|
||||||
|
yield
|
||||||
|
check_LDAP_db_integrity()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def check_permission_for_apps_call():
|
||||||
|
check_permission_for_apps()
|
||||||
|
yield
|
||||||
|
check_permission_for_apps()
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def secondary_domain(request):
|
||||||
|
|
||||||
|
if "example.test" not in domain_list()["domains"]:
|
||||||
|
domain_add("example.test")
|
||||||
|
|
||||||
|
def remove_example_domain():
|
||||||
|
domain_remove("example.test")
|
||||||
|
request.addfinalizer(remove_example_domain)
|
||||||
|
|
||||||
|
return "example.test"
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Helpers #
|
||||||
|
#
|
||||||
|
|
||||||
|
def app_expected_files(domain, app):
|
||||||
|
|
||||||
|
yield "/etc/nginx/conf.d/%s.d/%s.conf" % (domain, app)
|
||||||
|
if app.startswith("legacy_app"):
|
||||||
|
yield "/var/www/%s/index.html" % app
|
||||||
|
yield "/etc/yunohost/apps/%s/settings.yml" % app
|
||||||
|
yield "/etc/yunohost/apps/%s/manifest.json" % app
|
||||||
|
yield "/etc/yunohost/apps/%s/scripts/install" % app
|
||||||
|
yield "/etc/yunohost/apps/%s/scripts/remove" % app
|
||||||
|
|
||||||
|
|
||||||
|
def app_is_installed(domain, app):
|
||||||
|
|
||||||
|
return _is_installed(app) and all(os.path.exists(f) for f in app_expected_files(domain, app))
|
||||||
|
|
||||||
|
|
||||||
|
def app_is_not_installed(domain, app):
|
||||||
|
|
||||||
|
return not _is_installed(app) and not all(os.path.exists(f) for f in app_expected_files(domain, app))
|
||||||
|
|
||||||
|
|
||||||
|
def app_is_exposed_on_http(domain, path, message_in_page):
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = requests.get("http://127.0.0.1" + path + "/", headers={"Host": domain}, timeout=10)
|
||||||
|
return r.status_code == 200 and message_in_page in r.text
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def install_legacy_app(domain, path):
|
||||||
|
|
||||||
|
app_install("./tests/apps/legacy_app_ynh",
|
||||||
|
args="domain=%s&path=%s" % (domain, path),
|
||||||
|
force=True)
|
||||||
|
|
||||||
|
|
||||||
|
def install_break_yo_system(domain, breakwhat):
|
||||||
|
|
||||||
|
app_install("./tests/apps/break_yo_system_ynh",
|
||||||
|
args="domain=%s&breakwhat=%s" % (domain, breakwhat),
|
||||||
|
force=True)
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_main_domain():
|
||||||
|
|
||||||
|
main_domain = _get_maindomain()
|
||||||
|
|
||||||
|
install_legacy_app(main_domain, "/legacy")
|
||||||
|
|
||||||
|
assert app_is_installed(main_domain, "legacy_app")
|
||||||
|
assert app_is_exposed_on_http(main_domain, "/legacy", "This is a dummy app")
|
||||||
|
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
assert app_is_not_installed(main_domain, "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_secondary_domain(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_exposed_on_http(secondary_domain, "/legacy", "This is a dummy app")
|
||||||
|
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_secondary_domain_on_root(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/")
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_exposed_on_http(secondary_domain, "/", "This is a dummy app")
|
||||||
|
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_private(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
|
||||||
|
settings = open("/etc/yunohost/apps/legacy_app/settings.yml", "r").read()
|
||||||
|
new_settings = settings.replace("\nunprotected_uris: /", "")
|
||||||
|
assert new_settings != settings
|
||||||
|
open("/etc/yunohost/apps/legacy_app/settings.yml", "w").write(new_settings)
|
||||||
|
app_ssowatconf()
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app")
|
||||||
|
assert not app_is_exposed_on_http(secondary_domain, "/legacy", "This is a dummy app")
|
||||||
|
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_unknown_domain():
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_legacy_app("whatever.nope", "/legacy")
|
||||||
|
# TODO check error message
|
||||||
|
|
||||||
|
assert app_is_not_installed("whatever.nope", "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_multiple_instances(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/foo")
|
||||||
|
install_legacy_app(secondary_domain, "/bar")
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_exposed_on_http(secondary_domain, "/foo", "This is a dummy app")
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app__2")
|
||||||
|
assert app_is_exposed_on_http(secondary_domain, "/bar", "This is a dummy app")
|
||||||
|
|
||||||
|
app_remove("legacy_app")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app__2")
|
||||||
|
|
||||||
|
app_remove("legacy_app__2")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app__2")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_path_unavailable(secondary_domain):
|
||||||
|
|
||||||
|
# These will be removed in teardown
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_legacy_app(secondary_domain, "/")
|
||||||
|
# TODO check error message
|
||||||
|
|
||||||
|
assert app_is_installed(secondary_domain, "legacy_app")
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app__2")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_bad_args():
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_legacy_app("this.domain.does.not.exists", "/legacy")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_install_with_nginx_down(secondary_domain):
|
||||||
|
|
||||||
|
os.system("systemctl stop nginx")
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_failed_install(secondary_domain):
|
||||||
|
|
||||||
|
# This will conflict with the folder that the app
|
||||||
|
# attempts to create, making the install fail
|
||||||
|
mkdir("/var/www/legacy_app/", 0o750)
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
# TODO check error message
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy_app")
|
||||||
|
|
||||||
|
|
||||||
|
def test_legacy_app_failed_remove(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
|
||||||
|
# The remove script runs with set -eu and attempt to remove this
|
||||||
|
# file without -f, so will fail if it's not there ;)
|
||||||
|
os.remove("/etc/nginx/conf.d/%s.d/%s.conf" % (secondary_domain, "legacy_app"))
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
app_remove("legacy")
|
||||||
|
|
||||||
|
#
|
||||||
|
# Well here, we hit the classical issue where if an app removal script
|
||||||
|
# fails, so far there's no obvious way to make sure that all files related
|
||||||
|
# to this app got removed ...
|
||||||
|
#
|
||||||
|
assert app_is_not_installed(secondary_domain, "legacy")
|
||||||
|
|
||||||
|
|
||||||
|
def test_systemfuckedup_during_app_install(secondary_domain):
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_break_yo_system(secondary_domain, breakwhat="install")
|
||||||
|
os.system("nginx -t")
|
||||||
|
os.system("systemctl status nginx")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "break_yo_system")
|
||||||
|
|
||||||
|
|
||||||
|
def test_systemfuckedup_during_app_remove(secondary_domain):
|
||||||
|
|
||||||
|
install_break_yo_system(secondary_domain, breakwhat="remove")
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
app_remove("break_yo_system")
|
||||||
|
os.system("nginx -t")
|
||||||
|
os.system("systemctl status nginx")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "break_yo_system")
|
||||||
|
|
||||||
|
|
||||||
|
def test_systemfuckedup_during_app_install_and_remove(secondary_domain):
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
install_break_yo_system(secondary_domain, breakwhat="everything")
|
||||||
|
|
||||||
|
assert app_is_not_installed(secondary_domain, "break_yo_system")
|
||||||
|
|
||||||
|
|
||||||
|
def test_systemfuckedup_during_app_upgrade(secondary_domain):
|
||||||
|
|
||||||
|
install_break_yo_system(secondary_domain, breakwhat="upgrade")
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
app_upgrade("break_yo_system", file="./tests/apps/break_yo_system_ynh")
|
||||||
|
|
||||||
|
|
||||||
|
def test_failed_multiple_app_upgrade(secondary_domain):
|
||||||
|
|
||||||
|
install_legacy_app(secondary_domain, "/legacy")
|
||||||
|
install_break_yo_system(secondary_domain, breakwhat="upgrade")
|
||||||
|
|
||||||
|
with pytest.raises(YunohostError):
|
||||||
|
app_upgrade(["break_yo_system", "legacy_app"],
|
||||||
|
file={"break_yo_system": "./tests/apps/break_yo_system_ynh",
|
||||||
|
"legacy": "./tests/apps/legacy_app_ynh"})
|
Loading…
Add table
Reference in a new issue