Merge remote-tracking branch 'origin/dev' into bookworm

This commit is contained in:
Alexandre Aubin 2024-03-14 09:13:37 +01:00
commit 11cabc0fe7
42 changed files with 763 additions and 283 deletions

35
.github/workflows/autoblack.yml vendored Normal file
View file

@ -0,0 +1,35 @@
name: Check / auto apply Black
on:
push:
branches:
- dev
jobs:
black:
name: Check / auto apply black
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check files using the black formatter
uses: psf/black@stable
id: black
with:
options: "."
continue-on-error: true
- shell: pwsh
id: check_files_changed
run: |
# Diff HEAD with the previous commit
$diff = git diff
$HasDiff = $diff.Length -gt 0
Write-Host "::set-output name=files_changed::$HasDiff"
- name: Create Pull Request
if: steps.check_files_changed.outputs.files_changed == 'true'
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: "Format Python code with Black"
commit-message: ":art: Format Python code with Black"
body: |
This pull request uses the [psf/black](https://github.com/psf/black) formatter.
base: ${{ github.head_ref }} # Creates pull request onto pull request or commit branch
branch: actions/black

View file

@ -27,7 +27,7 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL

View file

@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Fetch the source code - name: Fetch the source code
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Run the updater script - name: Run the updater script
@ -33,7 +33,7 @@ jobs:
- name: Create Pull Request - name: Create Pull Request
id: cpr id: cpr
if: ${{ env.PROCEED == 'true' }} if: ${{ env.PROCEED == 'true' }}
uses: peter-evans/create-pull-request@v3 uses: peter-evans/create-pull-request@v6
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Update n to ${{ env.VERSION }} commit-message: Update n to ${{ env.VERSION }}

View file

@ -19,31 +19,31 @@ YunoHost is an operating system aiming to simplify as much as possible the admin
This repository corresponds to the core code of YunoHost, mainly written in Python and Bash. This repository corresponds to the core code of YunoHost, mainly written in Python and Bash.
- [Project features](https://yunohost.org/#/whatsyunohost) - [Project features](https://yunohost.org/whatsyunohost)
- [Project website](https://yunohost.org) - [Project website](https://yunohost.org)
- [Install documentation](https://yunohost.org/install) - [Install documentation](https://yunohost.org/install)
- [Issue tracker](https://github.com/YunoHost/issues) - [Issue tracker](https://github.com/YunoHost/issues)
# Screenshots ## Screenshots
Webadmin ([Yunohost-Admin](https://github.com/YunoHost/yunohost-admin)) | Single sign-on user portal ([SSOwat](https://github.com/YunoHost/ssowat)) Webadmin ([Yunohost-Admin](https://github.com/YunoHost/yunohost-admin)) | Single sign-on user portal ([SSOwat](https://github.com/YunoHost/ssowat))
--- | --- --- | ---
![](https://raw.githubusercontent.com/YunoHost/doc/master/images/webadmin.png) | ![](https://raw.githubusercontent.com/YunoHost/doc/master/images/user_panel.png) ![Web admin insterface screenshot](https://raw.githubusercontent.com/YunoHost/doc/master/images/webadmin.png) | ![User portal screenshot](https://raw.githubusercontent.com/YunoHost/doc/master/images/user_panel.png)
## Contributing ## Contributing
- You can learn how to get started with developing on YunoHost by reading [this piece of documentation](https://yunohost.org/dev). - You can learn how to get started with developing on YunoHost by reading [this piece of documentation](https://yunohost.org/dev).
- Come chat with us on the [dev chatroom](https://yunohost.org/#/chat_rooms) ! - Come chat with us on the [dev chatroom](https://yunohost.org/chat_rooms)!
- You can help translate YunoHost 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).
<p align="center"> <p align="center">
<img src="https://translate.yunohost.org/widgets/yunohost/-/core/horizontal-auto.svg" alt="Translation status" /> <img alt="View of the translation rate for the different languages available in YunoHost" src="https://translate.yunohost.org/widgets/yunohost/-/core/horizontal-auto.svg" alt="Translation status" />
</p> </p>
## License ## License
As [other components of YunoHost](https://yunohost.org/#/faq_en), this repository is licensed under GNU AGPL v3. As [other components of YunoHost](https://yunohost.org/faq), this repository is licensed under GNU AGPL v3.
## They support us <3 ## They support us <3
@ -51,16 +51,16 @@ We are thankful for our sponsors providing us with infrastructure and grants!
<div align="center"> <div align="center">
<p style="margin-left:auto;margin-right:auto;"> <p style="margin-left:auto;margin-right:auto;">
<a style="padding: 5px;" href="https://nlnet.nl"><img src="https://user-images.githubusercontent.com/36127788/198088570-823c40bd-7ac3-44e3-a8ee-e7a9f14b47ac.png" width="150px"/></a> <a style="padding: 5px;" href="https://nlnet.nl"><img alt="NLnet Foundation" src="https://user-images.githubusercontent.com/36127788/198088570-823c40bd-7ac3-44e3-a8ee-e7a9f14b47ac.png" width="150px"/></a>
<a style="padding: 5px;" href="https://www.ngi.eu"><img src="https://user-images.githubusercontent.com/36127788/198088663-daf587b9-fd09-4c00-aaf2-37c803939c94.png" width="130px"/></a> <a style="padding: 5px;" href="https://www.ngi.eu"><img alt="Next Generation Internet" src="https://user-images.githubusercontent.com/36127788/198088663-daf587b9-fd09-4c00-aaf2-37c803939c94.png" width="130px"/></a>
<a style="padding: 5px;" href="https://www.codelutin.com"><img src="https://user-images.githubusercontent.com/36127788/198088737-d37b6674-379c-4be4-9d74-b93b6ad318d1.png" width="100px"/></a> <a style="padding: 5px;" href="https://www.codelutin.com"><img alt="Code Lutin" src="https://user-images.githubusercontent.com/36127788/198088737-d37b6674-379c-4be4-9d74-b93b6ad318d1.png" width="100px"/></a>
</p> </p>
<p style="margin-left:auto;margin-right:auto;"> <p style="margin-left:auto;margin-right:auto;">
<a style="padding: 5px;" href="https://www.globenet.org"><img src="https://user-images.githubusercontent.com/36127788/198088794-751129ab-737d-4d99-9f35-5e01845dcdfe.png" width="150px"/></a> <a style="padding: 5px;" href="https://www.globenet.org"><img alt="Globenet" src="https://user-images.githubusercontent.com/36127788/198088794-751129ab-737d-4d99-9f35-5e01845dcdfe.png" width="150px"/></a>
<a style="padding: 5px;" href="https://www.gitoyen.net"><img src="https://user-images.githubusercontent.com/36127788/198088931-f16f4af4-57ae-42e9-8d42-fb3e2d8d7ee3.png" width="150px"/></a> <a style="padding: 5px;" href="https://www.gitoyen.net"><img alt="Gitoyen" src="https://user-images.githubusercontent.com/36127788/198088931-f16f4af4-57ae-42e9-8d42-fb3e2d8d7ee3.png" width="150px"/></a>
<a style="padding: 5px;" href="https://tetaneutral.net"><img src="https://user-images.githubusercontent.com/36127788/198088995-3ad9c34d-9807-4ead-934b-44df97d3c552.png" width="90px"/></a> <a style="padding: 5px;" href="https://tetaneutral.net"><img alt="tetaneutral.net" src="https://user-images.githubusercontent.com/36127788/198088995-3ad9c34d-9807-4ead-934b-44df97d3c552.png" width="90px"/></a>
<a style="padding: 5px;" href="https://ldn-fai.net"><img src="https://user-images.githubusercontent.com/36127788/198089086-a4089d51-9173-4081-bd2e-fa1ac3378e49.png" width="120px"/></a> <a style="padding: 5px;" href="https://ldn-fai.net"><img alt="LDN (Lorraine Data Network)" src="https://user-images.githubusercontent.com/36127788/198089086-a4089d51-9173-4081-bd2e-fa1ac3378e49.png" width="120px"/></a>
<a style="padding: 5px;" href="https://www.nbs-system.com"><img src="https://user-images.githubusercontent.com/36127788/198089161-4cc0b7b7-bf56-4798-892e-a76112497921.png" width="130px"/></a> <a style="padding: 5px;" href="https://www.nbs-system.com"><img alt="NBS System" src="https://user-images.githubusercontent.com/36127788/198089161-4cc0b7b7-bf56-4798-892e-a76112497921.png" width="130px"/></a>
</p> </p>
</div> </div>

57
debian/changelog vendored
View file

@ -4,6 +4,63 @@ yunohost (12.0.0) unstable; urgency=low
-- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 04 May 2023 20:30:19 +0200 -- Alexandre Aubin <alex.aubin@mailoo.org> Thu, 04 May 2023 20:30:19 +0200
yunohost (11.2.10.3) stable; urgency=low
- fix: latest release was tagged 'testing' by error
Thanks to all contributors <3 ! (Alexandre Aubin, Tagada, OniriCorpe)
-- OniriCorpe <oniricorpe@yunohost.org> Thu, 29 Feb 2024 23:49:11 +0100
yunohost (11.2.10.2) stable; urgency=low
- docs: add autoupdate.version_regex to the doc ([#1781](http://github.com/YunoHost/yunohost/pull/1781))
- chores: update actions/checkout & peter-evans/create-pull-request to nodejs20 ([#1784](http://github.com/YunoHost/yunohost/pull/1784))
- apps: fix readonly questions at install (display_text, etc) ([#1786](http://github.com/YunoHost/yunohost/pull/1786))
- chores: upgrade n to v9.2.1 ([#1783](http://github.com/YunoHost/yunohost/pull/1783))
- helpers/logrotate: fix logs folder permissions ([#1787](http://github.com/YunoHost/yunohost/pull/1787))
- fix: list root ssh keys ([#1788](http://github.com/YunoHost/yunohost/pull/1788))
- [i18n] Translations updated for German
Thanks to all contributors <3 ! (Alexandre Aubin, Félix Piédallu, Kay0u, ljf (zamentur), Tagada, tituspijean, YunoHost Bot)
-- OniriCorpe <oniricorpe@yunohost.org> Thu, 29 Feb 2024 23:49:11 +0100
yunohost (11.2.10.1) stable; urgency=low
- apps/autoupdate: update docs ([#1776](http://github.com/YunoHost/yunohost/pull/1776))
- fix: sury apt key/purge all expired apt keys ([#1777](http://github.com/YunoHost/yunohost/pull/1777))
- helpers/logrotate: fix logs folders perms ([#1774](http://github.com/YunoHost/yunohost/pull/1774))
- [i18n] Translations updated for Catalan, Italian
Thanks to all contributors <3 ! (Alexandre Aubin, Bram, Francescc, Kayou, OniriCorpe, Tagada, Tommi, yunohost-bot)
-- Kay0u <pierre@kayou.io> Tue, 20 Feb 2024 23:33:20 +0100
yunohost (11.2.10) stable; urgency=low
- helpers: document --after= in for ynh_read_var_in_file and ynh_write_var_in_file ([#1758](https://github.com/yunohost/yunohost/pull/1758))
- resources: document changelog link for latest_github_release ([#1760](https://github.com/yunohost/yunohost/pull/1760))
- apps/helpers: Reword YNH_APP_UPGRADE_TYPE ([#1762](https://github.com/yunohost/yunohost/pull/1762))
- app shells: auto-source venv for python apps ([#1756](https://github.com/yunohost/yunohost/pull/1756))
- tools: Add a 'yunohost tools basic-space-cleanup' command ([#1761](https://github.com/yunohost/yunohost/pull/1761))
- certs/xmpp: Fix DNS suffix edge case during XMPP certificate setup ([#1763](https://github.com/yunohost/yunohost/pull/1763))
- helpers/php: quote vars to avoid stupid issues with name in path which may happen in backup restore context... (05f7c3a3b)
- multimedia: fix again edgecase where setfacl crashes because of broken symlinks.. (1ce606d46)
- helpers: disable super verbose logging during ynh_replace_vars poluting logs, it's kinda stable now... (981956051, c2af17667)
- apps: people insist on trying to install Nextcloud after creating a user called nextcloud ... So let's check this stupid case (fc12cb198)
- apps: fix port reuse during provisionning ([#1769](https://github.com/yunohost/yunohost/pull/1769))
- configpanels: some helpers behavior depend on YNH_APP_PACKAGING_FORMAT which is not set when calling the config script... (077b745d6)
- global settings: Add warning regarding ssh ports below 1024 ([#1765](https://github.com/yunohost/yunohost/pull/1765))
- global settings: mention cidr notation support in webadmin allowlist help ([#1770](https://github.com/yunohost/yunohost/pull/1770))
- chores: update copyright headers to 2024 using maintenance/update_copyright_headers.sh (a44ea1414)
- i18n: remove stale i18n strings, fix format inconsistencies (890fcee05, [#1764](https://github.com/yunohost/yunohost/pull/1764))
- i18n: Translations updated for Arabic, Basque, Catalan, French, Galician, German, Slovak, Spanish, Ukrainian
Thanks to all contributors <3 ! (Bram, Carlos Solís, Christian Wehrli, cube, Éric Gaspar, Félix Piédallu, Francescc, José M, Jose Riha, Lasse Gismo, ljf (zamentur), OniriCorpe, ppr, Saeba Ryo, tituspijean, xabirequejo)
-- Alexandre Aubin <alex.aubin@mailoo.org> Fri, 09 Feb 2024 20:05:36 +0100
yunohost (11.2.9.1) stable; urgency=low yunohost (11.2.9.1) stable; urgency=low
- helpers/utils: replace the damn ynh_die with a warning when patch fails to apply ... (0ed6769fc) - helpers/utils: replace the damn ynh_die with a warning when patch fails to apply ... (0ed6769fc)

View file

@ -8,6 +8,7 @@ adds `--help` at the end if one presses [tab] again.
author: Christophe Vuillot author: Christophe Vuillot
""" """
import os import os
import yaml import yaml

View file

@ -62,7 +62,7 @@ for c in ResourceClasses:
for resource_id, doc in sorted(ResourceDocString.items()): for resource_id, doc in sorted(ResourceDocString.items()):
print("----------------") print("---")
print("") print("")
print(f"## {resource_id.replace('_', ' ').title()}") print(f"## {resource_id.replace('_', ' ').title()}")
print("") print("")

View file

@ -12,7 +12,7 @@ Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/{{
{% for category, helpers in data.helpers %} {% for category, helpers in data.helpers %}
## {{ category.upper() }} ## {{ category.upper() }}
{% for h in helpers %} {% for h in helpers %}
#### {{ h.name }} ### {{ h.name }}
[details summary="<i>{{ h.brief }}</i>" class="helper-card-subtitle text-muted"] [details summary="<i>{{ h.brief }}</i>" class="helper-card-subtitle text-muted"]
**Usage**: `{{ h.usage }}` **Usage**: `{{ h.usage }}`
@ -48,12 +48,12 @@ Doc auto-generated by [this script](https://github.com/YunoHost/yunohost/blob/{{
{%- endif %} {%- endif %}
{%- if h.details %} {%- if h.details %}
**Details**:<br/> **Details**:
{{ h.details }} {{ h.details }}
{%- endif %} {%- endif %}
[Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/{{ current_commit }}/helpers/{{ category }}#L{{ h.line + 1 }}) [Dude, show me the code!](https://github.com/YunoHost/yunohost/blob/{{ current_commit }}/helpers/{{ category }}#L{{ h.line + 1 }})
[/details] [/details]
----------------
---
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}

View file

@ -87,6 +87,8 @@ EOF
# Make sure permissions are correct (otherwise the config file could be ignored and the corresponding logs never rotated) # Make sure permissions are correct (otherwise the config file could be ignored and the corresponding logs never rotated)
chmod 644 "/etc/logrotate.d/$app" chmod 644 "/etc/logrotate.d/$app"
mkdir -p "/var/log/$app"
chmod 750 "/var/log/$app"
} }
# Remove the app's logrotate config. # Remove the app's logrotate config.

View file

@ -44,9 +44,9 @@ ynh_multimedia_build_main_dir() {
## Application des droits étendus sur le dossier multimedia. ## Application des droits étendus sur le dossier multimedia.
# Droit d'écriture pour le groupe et le groupe multimedia en acl et droit de lecture pour other: # Droit d'écriture pour le groupe et le groupe multimedia en acl et droit de lecture pour other:
setfacl -RnL -m g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" setfacl -RnL -m g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" || true
# Application de la même règle que précédemment, mais par défaut pour les nouveaux fichiers. # Application de la même règle que précédemment, mais par défaut pour les nouveaux fichiers.
setfacl -RnL -m d:g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" setfacl -RnL -m d:g:$MEDIA_GROUP:rwX,g::rwX,o:r-X "$MEDIA_DIRECTORY" || true
# Réglage du masque par défaut. Qui garantie (en principe...) un droit maximal à rwx. Donc pas de restriction de droits par l'acl. # Réglage du masque par défaut. Qui garantie (en principe...) un droit maximal à rwx. Donc pas de restriction de droits par l'acl.
setfacl -RL -m m::rwx "$MEDIA_DIRECTORY" || true setfacl -RL -m m::rwx "$MEDIA_DIRECTORY" || true
} }

View file

@ -166,19 +166,19 @@ pm = __PHP_PM__
pm.max_children = __PHP_MAX_CHILDREN__ pm.max_children = __PHP_MAX_CHILDREN__
pm.max_requests = 500 pm.max_requests = 500
request_terminate_timeout = 1d request_terminate_timeout = 1d
" >$phpfpm_path " >"$phpfpm_path"
if [ "$php_pm" = "dynamic" ]; then if [ "$php_pm" = "dynamic" ]; then
echo " echo "
pm.start_servers = __PHP_START_SERVERS__ pm.start_servers = __PHP_START_SERVERS__
pm.min_spare_servers = __PHP_MIN_SPARE_SERVERS__ pm.min_spare_servers = __PHP_MIN_SPARE_SERVERS__
pm.max_spare_servers = __PHP_MAX_SPARE_SERVERS__ pm.max_spare_servers = __PHP_MAX_SPARE_SERVERS__
" >>$phpfpm_path " >>"$phpfpm_path"
elif [ "$php_pm" = "ondemand" ]; then elif [ "$php_pm" = "ondemand" ]; then
echo " echo "
pm.process_idle_timeout = 10s pm.process_idle_timeout = 10s
" >>$phpfpm_path " >>"$phpfpm_path"
fi fi
# Concatene the extra config. # Concatene the extra config.

View file

@ -584,6 +584,8 @@ ynh_replace_vars() {
# List other unique (__ __) variables in $file # List other unique (__ __) variables in $file
local uniques_vars=($(grep -oP '__[A-Z0-9]+?[A-Z0-9_]*?[A-Z0-9]*?__' $file | sort --unique | sed "s@__\([^.]*\)__@\L\1@g")) local uniques_vars=($(grep -oP '__[A-Z0-9]+?[A-Z0-9_]*?[A-Z0-9]*?__' $file | sort --unique | sed "s@__\([^.]*\)__@\L\1@g"))
set +o xtrace # set +x
# Do the replacement # Do the replacement
local delimit=@ local delimit=@
for one_var in "${uniques_vars[@]}"; do for one_var in "${uniques_vars[@]}"; do
@ -604,6 +606,7 @@ ynh_replace_vars() {
# Actually replace (sed is used instead of ynh_replace_string to avoid triggering an epic amount of debug logs) # Actually replace (sed is used instead of ynh_replace_string to avoid triggering an epic amount of debug logs)
sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$file" sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$file"
done done
set -o xtrace # set -x
} }
# Get a value from heterogeneous file (yaml, json, php, python...) # Get a value from heterogeneous file (yaml, json, php, python...)

73
helpers/vendor/n/n vendored
View file

@ -61,7 +61,7 @@ function n_grep() {
# Setup and state # Setup and state
# #
VERSION="v9.2.0" VERSION="v9.2.1"
N_PREFIX="${N_PREFIX-/usr/local}" N_PREFIX="${N_PREFIX-/usr/local}"
N_PREFIX=${N_PREFIX%/} N_PREFIX=${N_PREFIX%/}
@ -1425,7 +1425,11 @@ uninstall_installed() {
function show_permission_suggestions() { function show_permission_suggestions() {
echo "Suggestions:" echo "Suggestions:"
echo "- run n with sudo, or" echo "- run n with sudo, or"
echo "- define N_PREFIX to a writeable location, or" if [[ "${N_CACHE_PREFIX}" == "${N_PREFIX}" ]]; then
echo "- define N_PREFIX to a writeable location, or"
else
echo "- define N_PREFIX and N_CACHE_PREFIX to writeable locations, or"
fi
} }
# #
@ -1556,34 +1560,42 @@ function show_diagnostics() {
fi fi
fi fi
printf "\nChecking permissions for cache folder...\n" printf "\nChecking prefix folders...\n"
# Most likely problem is ownership rather than than permissions as such. if [[ ! -e "${N_PREFIX}" ]]; then
local cache_root="${N_PREFIX}/n" echo "Folder does not exist: ${N_PREFIX}"
if [[ -e "${N_PREFIX}" && ! -w "${N_PREFIX}" && ! -e "${cache_root}" ]]; then echo "- This folder will be created when you do an install."
echo_red "You do not have write permission to create: ${cache_root}" fi
show_permission_suggestions if [[ "${N_PREFIX}" != "${N_CACHE_PREFIX}" && ! -e "${N_CACHE_PREFIX}" ]]; then
echo "- make a folder you own:" echo "Folder does not exist: ${N_CACHE_PREFIX}"
echo " sudo mkdir -p \"${cache_root}\"" echo "- This folder will be created when you do an install."
echo " sudo chown $(whoami) \"${cache_root}\"" fi
elif [[ -e "${cache_root}" && ! -w "${cache_root}" ]]; then if [[ -e "${N_PREFIX}" && -e "${N_CACHE_PREFIX}" ]]; then
echo_red "You do not have write permission to: ${cache_root}"
show_permission_suggestions
echo "- change folder ownership to yourself:"
echo " sudo chown -R $(whoami) \"${cache_root}\""
elif [[ ! -e "${cache_root}" ]]; then
echo "Cache folder does not exist: ${cache_root}"
echo "This is normal if you have not done an install yet, as cache is only created when needed."
elif [[ -e "${CACHE_DIR}" && ! -w "${CACHE_DIR}" ]]; then
echo_red "You do not have write permission to: ${CACHE_DIR}"
show_permission_suggestions
echo "- change folder ownership to yourself:"
echo " sudo chown -R $(whoami) \"${CACHE_DIR}\""
else
echo "good" echo "good"
fi fi
if [[ -e "${N_CACHE_PREFIX}" ]]; then
printf "\nChecking permissions for cache folder...\n"
# Using knowledge cache path ends in /n/versions in following check.
if [[ ! -e "${CACHE_DIR}" && (( -e "${N_CACHE_PREFIX}/n" && ! -w "${N_CACHE_PREFIX}/n" ) || ( ! -e "${N_CACHE_PREFIX}/n" && ! -w "${N_CACHE_PREFIX}" )) ]]; then
echo_red "You do not have write permission to create: ${CACHE_DIR}"
show_permission_suggestions
echo "- make a folder you own:"
echo " sudo mkdir -p \"${CACHE_DIR}\""
echo " sudo chown $(whoami) \"${CACHE_DIR}\""
elif [[ ! -e "${CACHE_DIR}" ]]; then
echo "Cache folder does not exist: ${CACHE_DIR}"
echo "- This is normal if you have not done an install yet, as cache is only created when needed."
elif [[ ! -w "${CACHE_DIR}" ]]; then
echo_red "You do not have write permission to: ${CACHE_DIR}"
show_permission_suggestions
echo "- change folder ownership to yourself:"
echo " sudo chown -R $(whoami) \"${CACHE_DIR}\""
else
echo "good"
fi
fi
if [[ -e "${N_PREFIX}" ]]; then if [[ -e "${N_PREFIX}" ]]; then
# Most likely problem is ownership rather than than permissions as such.
printf "\nChecking permissions for install folders...\n" printf "\nChecking permissions for install folders...\n"
local install_writeable="true" local install_writeable="true"
for subdir in bin lib include share; do for subdir in bin lib include share; do
@ -1592,13 +1604,20 @@ function show_diagnostics() {
echo_red "You do not have write permission to: ${N_PREFIX}/${subdir}" echo_red "You do not have write permission to: ${N_PREFIX}/${subdir}"
break break
fi fi
if [[ ! -e "${N_PREFIX}/${subdir}" && ! -w "${N_PREFIX}" ]]; then
install_writeable="false"
echo_red "You do not have write permission to create: ${N_PREFIX}/${subdir}"
break
fi
done done
if [[ "${install_writeable}" = "true" ]]; then if [[ "${install_writeable}" = "true" ]]; then
echo "good" echo "good"
else else
show_permission_suggestions show_permission_suggestions
echo "- change folder ownerships to yourself:" echo "- change folder ownerships to yourself:"
echo " (cd \"${N_PREFIX}\" && sudo chown -R $(whoami) bin lib include share)" echo " cd \"${N_PREFIX}\""
echo " sudo mkdir -p bin lib include share"
echo " sudo chown -R $(whoami) bin lib include share"
fi fi
fi fi

View file

@ -76,6 +76,10 @@ Pin-Priority: -1
do_post_regen() { do_post_regen() {
regen_conf_files=$1 regen_conf_files=$1
# Purge expired keys (such as sury 95BD4743)
EXPIRED_KEYS="$(LC_ALL='en_US.UTF-8' apt-key list 2>/dev/null | grep -A1 'expired:' | grep -v 'expired\|^-' | sed 's/\s//g')"
for KEY in $EXPIRED_KEYS; do apt-key del $KEY 2>/dev/null; done
# Add sury key # Add sury key
# We do this only at the post regen and if the key doesn't already exists, because we don't want the regenconf to fuck everything up if the regenconf runs while the network is down # We do this only at the post regen and if the key doesn't already exists, because we don't want the regenconf to fuck everything up if the regenconf runs while the network is down
if [[ ! -s /etc/apt/trusted.gpg.d/extra_php_version.gpg ]] if [[ ! -s /etc/apt/trusted.gpg.d/extra_php_version.gpg ]]

View file

@ -107,7 +107,6 @@
"service_description_rspamd": "يقوم بتصفية البريد المزعج و إدارة ميزات أخرى للبريد", "service_description_rspamd": "يقوم بتصفية البريد المزعج و إدارة ميزات أخرى للبريد",
"service_description_yunohost-firewall": "يُدير فتح وإغلاق منافذ الاتصال إلى الخدمات", "service_description_yunohost-firewall": "يُدير فتح وإغلاق منافذ الاتصال إلى الخدمات",
"aborting": "إلغاء.", "aborting": "إلغاء.",
"app_not_upgraded": "",
"app_start_install": "جارٍ تثبيت {app}…", "app_start_install": "جارٍ تثبيت {app}…",
"app_start_remove": "جارٍ حذف {app}…", "app_start_remove": "جارٍ حذف {app}…",
"app_start_restore": "جارٍ استرجاع {app}…", "app_start_restore": "جارٍ استرجاع {app}…",

View file

@ -4,7 +4,7 @@
"app_already_installed": "{app} ja està instal·lada", "app_already_installed": "{app} ja està instal·lada",
"app_already_installed_cant_change_url": "Aquesta aplicació ja està instal·lada. La URL no és pot canviar únicament amb aquesta funció. Mireu a `app changeurl` si està disponible.", "app_already_installed_cant_change_url": "Aquesta aplicació ja està instal·lada. La URL no és pot canviar únicament amb aquesta funció. Mireu a `app changeurl` si està disponible.",
"app_already_up_to_date": "{app} ja està actualitzada", "app_already_up_to_date": "{app} ja està actualitzada",
"app_argument_choice_invalid": "Utilitzeu una de les opcions «{choices}» per l'argument «{name}» en lloc de «{value}»", "app_argument_choice_invalid": "Trieu un valor vàlid per a l'argument «{name}»: «{value}»\" no es troba entre les opcions disponibles ({choices})",
"app_argument_invalid": "Escolliu un valor vàlid per l'argument «{name}»: {error}", "app_argument_invalid": "Escolliu un valor vàlid per l'argument «{name}»: {error}",
"app_argument_required": "Es necessita l'argument '{name}'", "app_argument_required": "Es necessita l'argument '{name}'",
"app_change_url_identical_domains": "L'antic i el nou domini/camí són idèntics ('{domain}{path}'), no hi ha res per fer.", "app_change_url_identical_domains": "L'antic i el nou domini/camí són idèntics ('{domain}{path}'), no hi ha res per fer.",
@ -18,8 +18,8 @@
"app_not_correctly_installed": "{app} sembla estar mal instal·lada", "app_not_correctly_installed": "{app} sembla estar mal instal·lada",
"app_not_installed": "No s'ha trobat {app} en la llista d'aplicacions instal·lades: {all_apps}", "app_not_installed": "No s'ha trobat {app} en la llista d'aplicacions instal·lades: {all_apps}",
"app_not_properly_removed": "{app} no s'ha pogut suprimir correctament", "app_not_properly_removed": "{app} no s'ha pogut suprimir correctament",
"app_removed": "{app} ha estat suprimida", "app_removed": "{app} ha estat desinstal·lada",
"app_requirements_checking": "Verificació dels paquets requerits per {app}...", "app_requirements_checking": "Verificació dels requisits per a {app}...",
"app_sources_fetch_failed": "No s'han pogut carregar els fitxers font, l'URL és correcta?", "app_sources_fetch_failed": "No s'han pogut carregar els fitxers font, l'URL és correcta?",
"app_unknown": "Aplicació desconeguda", "app_unknown": "Aplicació desconeguda",
"app_unsupported_remote_type": "El tipus remot utilitzat per l'aplicació no està suportat", "app_unsupported_remote_type": "El tipus remot utilitzat per l'aplicació no està suportat",
@ -37,7 +37,7 @@
"backup_applying_method_tar": "Creació de l'arxiu TAR de la còpia de seguretat...", "backup_applying_method_tar": "Creació de l'arxiu TAR de la còpia de seguretat...",
"backup_archive_app_not_found": "No s'ha pogut trobar {app} en l'arxiu de la còpia de seguretat", "backup_archive_app_not_found": "No s'ha pogut trobar {app} en l'arxiu de la còpia de seguretat",
"backup_archive_broken_link": "No s'ha pogut accedir a l'arxiu de la còpia de seguretat (enllaç invàlid cap a {path})", "backup_archive_broken_link": "No s'ha pogut accedir a l'arxiu de la còpia de seguretat (enllaç invàlid cap a {path})",
"backup_archive_name_exists": "Ja hi ha una còpia de seguretat amb aquest nom.", "backup_archive_name_exists": "Ja hi ha una còpia de seguretat amb el nom «{name}».",
"backup_archive_name_unknown": "Còpia de seguretat local \"{name}\" desconeguda", "backup_archive_name_unknown": "Còpia de seguretat local \"{name}\" desconeguda",
"backup_archive_open_failed": "No s'ha pogut obrir l'arxiu de la còpia de seguretat", "backup_archive_open_failed": "No s'ha pogut obrir l'arxiu de la còpia de seguretat",
"backup_archive_system_part_not_available": "La part «{part}» del sistema no està disponible en aquesta copia de seguretat", "backup_archive_system_part_not_available": "La part «{part}» del sistema no està disponible en aquesta copia de seguretat",
@ -47,7 +47,7 @@
"backup_cleaning_failed": "No s'ha pogut netejar el directori temporal de la còpia de seguretat", "backup_cleaning_failed": "No s'ha pogut netejar el directori temporal de la còpia de seguretat",
"backup_copying_to_organize_the_archive": "Copiant {size}MB per organitzar l'arxiu", "backup_copying_to_organize_the_archive": "Copiant {size}MB per organitzar l'arxiu",
"backup_couldnt_bind": "No es pot lligar {src} amb {dest}.", "backup_couldnt_bind": "No es pot lligar {src} amb {dest}.",
"backup_created": "S'ha creat la còpia de seguretat", "backup_created": "S'ha creat la còpia de seguretat: {name}",
"aborting": "Avortant.", "aborting": "Avortant.",
"app_not_upgraded": "L'aplicació «{failed_app}» no s'ha pogut actualitzar, i com a conseqüència s'ha cancel·lat l'actualització de les següents aplicacions: {apps}", "app_not_upgraded": "L'aplicació «{failed_app}» no s'ha pogut actualitzar, i com a conseqüència s'ha cancel·lat l'actualització de les següents aplicacions: {apps}",
"app_start_install": "instal·lant {app}...", "app_start_install": "instal·lant {app}...",
@ -64,7 +64,7 @@
"backup_custom_backup_error": "El mètode de còpia de seguretat personalitzat ha fallat a l'etapa «backup»", "backup_custom_backup_error": "El mètode de còpia de seguretat personalitzat ha fallat a l'etapa «backup»",
"backup_custom_mount_error": "El mètode de còpia de seguretat personalitzat ha fallat a l'etapa «mount»", "backup_custom_mount_error": "El mètode de còpia de seguretat personalitzat ha fallat a l'etapa «mount»",
"backup_delete_error": "No s'ha pogut suprimir «{path}»", "backup_delete_error": "No s'ha pogut suprimir «{path}»",
"backup_deleted": "S'ha suprimit la còpia de seguretat", "backup_deleted": "S'ha suprimit la còpia de seguretat: {name}",
"backup_hook_unknown": "Script de còpia de seguretat «{hook}» desconegut", "backup_hook_unknown": "Script de còpia de seguretat «{hook}» desconegut",
"backup_method_copy_finished": "La còpia de la còpia de seguretat ha acabat", "backup_method_copy_finished": "La còpia de la còpia de seguretat ha acabat",
"backup_method_custom_finished": "El mètode de còpia de seguretat personalitzat \"{method}\" ha acabat", "backup_method_custom_finished": "El mètode de còpia de seguretat personalitzat \"{method}\" ha acabat",
@ -98,17 +98,17 @@
"certmanager_cert_signing_failed": "No s'ha pogut firmar el nou certificat", "certmanager_cert_signing_failed": "No s'ha pogut firmar el nou certificat",
"certmanager_certificate_fetching_or_enabling_failed": "Sembla que utilitzar el nou certificat per {domain} ha fallat...", "certmanager_certificate_fetching_or_enabling_failed": "Sembla que utilitzar el nou certificat per {domain} ha fallat...",
"certmanager_domain_cert_not_selfsigned": "El certificat pel domini {domain} no és auto-signat Esteu segur de voler canviar-lo? (Utilitzeu «--force» per fer-ho)", "certmanager_domain_cert_not_selfsigned": "El certificat pel domini {domain} no és auto-signat Esteu segur de voler canviar-lo? (Utilitzeu «--force» per fer-ho)",
"certmanager_domain_dns_ip_differs_from_public_ip": "Els registres DNS pel domini «{domain}» són diferents a l'adreça IP d'aquest servidor. Mireu la categoria «registres DNS» (bàsic) al diagnòstic per a més informació. Si heu modificat recentment el registre A, si us plau espereu a que es propagui (hi ha eines per verificar la propagació disponibles a internet). (Si sabeu el que esteu fent, podeu utilitzar «--no-checks» per desactivar aquestes comprovacions.)", "certmanager_domain_dns_ip_differs_from_public_ip": "Les entrades DNS pel domini «{domain}» són diferents a l'adreça IP d'aquest servidor. Mireu la categoria «registres DNS» (bàsic) al diagnòstic per a més informació. Si heu modificat recentment el registre A, si us plau espereu a que es propagui (hi ha eines per verificar la propagació disponibles a internet). (Si sabeu el que esteu fent, podeu utilitzar «--no-checks» per desactivar aquestes comprovacions.)",
"certmanager_domain_http_not_working": "El domini {domain} sembla que no és accessible via HTTP. Verifiqueu la categoria «Web» en el diagnòstic per a més informació. (Si sabeu el que esteu fent, utilitzeu «--no-checks» per deshabilitar les comprovacions.)", "certmanager_domain_http_not_working": "El domini {domain} sembla que no és accessible via HTTP. Verifiqueu la categoria «Web» en el diagnòstic per a més informació. (Si sabeu el que esteu fent, utilitzeu «--no-checks» per deshabilitar aquestes comprovacions.)",
"certmanager_hit_rate_limit": "S'han emès massa certificats recentment per aquest mateix conjunt de dominis {domain}. Si us plau torneu-ho a intentar més tard. Consulteu https://letsencrypt.org/docs/rate-limits/ per obtenir més detalls", "certmanager_hit_rate_limit": "S'han emès massa certificats recentment per aquest mateix conjunt de dominis {domain}. Si us plau torneu-ho a intentar més tard. Consulteu https://letsencrypt.org/docs/rate-limits/ per obtenir més detalls",
"certmanager_no_cert_file": "No s'ha pogut llegir l'arxiu del certificat pel domini {domain} (fitxer: {file})", "certmanager_no_cert_file": "No s'ha pogut llegir l'arxiu del certificat pel domini {domain} (fitxer: {file})",
"certmanager_self_ca_conf_file_not_found": "No s'ha trobat el fitxer de configuració per l'autoritat del certificat auto-signat (fitxer: {file})", "certmanager_self_ca_conf_file_not_found": "No s'ha trobat el fitxer de configuració per l'autoritat del certificat auto-signat (fitxer: {file})",
"certmanager_unable_to_parse_self_CA_name": "No s'ha pogut analitzar el nom de l'autoritat del certificat auto-signat (fitxer: {file})", "certmanager_unable_to_parse_self_CA_name": "No s'ha pogut analitzar el nom de l'autoritat del certificat auto-signat (fitxer: {file})",
"confirm_app_install_warning": "Atenció: Aquesta aplicació funciona, però no està ben integrada amb YunoHost. Algunes característiques com la autenticació única i la còpia de seguretat/restauració poden no estar disponibles. Voleu instal·lar-la de totes maneres? [{answers}] ", "confirm_app_install_warning": "Atenció: Aquesta aplicació funciona, però no està ben integrada a YunoHost. Algunes característiques com la autenticació única i la còpia de seguretat/restauració poden no estar disponibles. Voleu instal·lar-la de totes maneres? [{answers}] ",
"confirm_app_install_danger": "PERILL! Aquesta aplicació encara és experimental (si no és que no funciona directament)! No hauríeu d'instal·lar-la a no ser que sapigueu el que feu. No obtindreu CAP AJUDA si l'aplicació no funciona o trenca el sistema... Si accepteu el risc, escriviu «{answers}»", "confirm_app_install_danger": "PERILL! Aquesta aplicació encara és experimental (si no és que no funciona directament)! No hauríeu d'instal·lar-la a no ser que sapigueu el que feu. No obtindreu CAP AJUDA si l'aplicació no funciona o trenca el sistema... Si accepteu el risc, escriviu «{answers}»",
"confirm_app_install_thirdparty": "PERILL! Aquesta aplicació no es part del catàleg d'aplicacions de YunoHost. La instal·lació d'aplicacions de terceres parts pot comprometre la integritat i seguretat del seu sistema. No hauríeu d'instal·lar-ne a no ser que sapigueu el que feu. No obtindreu CAP AJUDA si l'aplicació no funciona o trenca el sistema… Si accepteu el risc, escriviu «{answers}»", "confirm_app_install_thirdparty": "PERILL! Aquesta aplicació no es part del catàleg d'aplicacions de YunoHost. La instal·lació d'aplicacions de terceres parts pot comprometre la integritat i seguretat del seu sistema. NO hauríeu d'instal·lar-ne a no ser que sapigueu el que feu. No obtindreu CAP AJUDA si l'aplicació no funciona o trenca el sistema… Si accepteu el risc, escriviu «{answers}»",
"custom_app_url_required": "Heu de especificar una URL per actualitzar la vostra aplicació personalitzada {app}", "custom_app_url_required": "Heu de especificar una URL per actualitzar la vostra aplicació personalitzada {app}",
"dpkg_is_broken": "No es pot fer això en aquest instant perquè dpkg/APT (els gestors de paquets del sistema) sembla estar mal configurat... Podeu intentar solucionar-ho connectant-vos per SSH i executant «sudo apt install --fix-broken» i/o «sudo dpkg --configure -a».", "dpkg_is_broken": "No es pot fer això en aquest instant perquè dpkg/APT (els gestors de paquets del sistema) sembla estar mal configurat... Podeu intentar solucionar-ho connectant-vos per SSH i executant «sudo apt install --fix-broken» i/o «sudo dpkg --configure -a» i/o «sudo dpkg --audit».",
"domain_cannot_remove_main": "No es pot eliminar «{domain}» ja que és el domini principal, primer s'ha d'establir un nou domini principal utilitzant «yunohost domain main-domain -n <un-altre-domini>»; aquí hi ha una llista dels possibles dominis: {other_domains}", "domain_cannot_remove_main": "No es pot eliminar «{domain}» ja que és el domini principal, primer s'ha d'establir un nou domini principal utilitzant «yunohost domain main-domain -n <un-altre-domini>»; aquí hi ha una llista dels possibles dominis: {other_domains}",
"domain_cert_gen_failed": "No s'ha pogut generar el certificat", "domain_cert_gen_failed": "No s'ha pogut generar el certificat",
"domain_created": "S'ha creat el domini", "domain_created": "S'ha creat el domini",
@ -185,7 +185,7 @@
"mail_domain_unknown": "El domini «{domain}» de l'adreça de correu no és vàlid. Utilitzeu un domini administrat per aquest servidor.", "mail_domain_unknown": "El domini «{domain}» de l'adreça de correu no és vàlid. Utilitzeu un domini administrat per aquest servidor.",
"mail_forward_remove_failed": "No s'han pogut eliminar el reenviament de correu «{mail}»", "mail_forward_remove_failed": "No s'han pogut eliminar el reenviament de correu «{mail}»",
"mailbox_used_space_dovecot_down": "S'ha d'engegar el servei de correu Dovecot, per poder obtenir l'espai utilitzat per la bústia de correu", "mailbox_used_space_dovecot_down": "S'ha d'engegar el servei de correu Dovecot, per poder obtenir l'espai utilitzat per la bústia de correu",
"mail_unavailable": "Aquesta adreça de correu està reservada i ha de ser atribuïda automàticament el primer usuari", "mail_unavailable": "Aquesta adreça de correu està reservada per al grup d'administradors",
"main_domain_change_failed": "No s'ha pogut canviar el domini principal", "main_domain_change_failed": "No s'ha pogut canviar el domini principal",
"main_domain_changed": "S'ha canviat el domini principal", "main_domain_changed": "S'ha canviat el domini principal",
"migrations_list_conflict_pending_done": "No es pot utilitzar «--previous» i «--done» al mateix temps.", "migrations_list_conflict_pending_done": "No es pot utilitzar «--previous» i «--done» al mateix temps.",
@ -199,8 +199,8 @@
"pattern_backup_archive_name": "Ha de ser un nom d'arxiu vàlid amb un màxim de 30 caràcters, compost per caràcters alfanumèrics i -_. exclusivament", "pattern_backup_archive_name": "Ha de ser un nom d'arxiu vàlid amb un màxim de 30 caràcters, compost per caràcters alfanumèrics i -_. exclusivament",
"pattern_domain": "Ha de ser un nom de domini vàlid (ex.: el-meu-domini.cat)", "pattern_domain": "Ha de ser un nom de domini vàlid (ex.: el-meu-domini.cat)",
"pattern_email": "Ha de ser una adreça de correu vàlida, sense el símbol «+» (ex.: algu@domini.cat)", "pattern_email": "Ha de ser una adreça de correu vàlida, sense el símbol «+» (ex.: algu@domini.cat)",
"pattern_firstname": "Ha de ser un nom vàlid", "pattern_firstname": "Ha de ser un nom vàlid (almenys tres caràcters)",
"pattern_lastname": "Ha de ser un cognom vàlid", "pattern_lastname": "Ha de ser un cognom vàlid (almenys tres caràcters)",
"pattern_mailbox_quota": "Ha de ser una mida amb el sufix b/k/M/G/T o 0 per no tenir quota", "pattern_mailbox_quota": "Ha de ser una mida amb el sufix b/k/M/G/T o 0 per no tenir quota",
"pattern_password": "Ha de tenir un mínim de 3 caràcters", "pattern_password": "Ha de tenir un mínim de 3 caràcters",
"pattern_port_or_range": "Ha de ser un número de port vàlid (i.e. 0-65535) o un interval de ports (ex. 100:200)", "pattern_port_or_range": "Ha de ser un número de port vàlid (i.e. 0-65535) o un interval de ports (ex. 100:200)",
@ -439,7 +439,7 @@
"diagnosis_no_cache": "Encara no hi ha memòria cau pel diagnòstic de la categoria «{category}»", "diagnosis_no_cache": "Encara no hi ha memòria cau pel diagnòstic de la categoria «{category}»",
"diagnosis_http_timeout": "S'ha exhaurit el temps d'esperar intentant connectar amb el servidor des de l'exterior.<br>1. La causa més probable per a aquest problema és que el port 80 (i 443) <a href='https://yunohost.org/isp_box_config'>no reenvien correctament cap al vostre servidor</a>.<br>2. També us hauríeu d'assegurar que el servei nginx estigui funcionant<br>3. En configuracions més complexes: assegureu-vos que no hi ha cap tallafoc o reverse-proxy interferint.", "diagnosis_http_timeout": "S'ha exhaurit el temps d'esperar intentant connectar amb el servidor des de l'exterior.<br>1. La causa més probable per a aquest problema és que el port 80 (i 443) <a href='https://yunohost.org/isp_box_config'>no reenvien correctament cap al vostre servidor</a>.<br>2. També us hauríeu d'assegurar que el servei nginx estigui funcionant<br>3. En configuracions més complexes: assegureu-vos que no hi ha cap tallafoc o reverse-proxy interferint.",
"diagnosis_http_connection_error": "Error de connexió: no s'ha pogut connectar amb el domini demanat, segurament és inaccessible.", "diagnosis_http_connection_error": "Error de connexió: no s'ha pogut connectar amb el domini demanat, segurament és inaccessible.",
"yunohost_postinstall_end_tip": "S'ha completat la post-instal·lació. Per acabar la configuració, considereu:\n - afegir un primer usuari a través de la secció «Usuaris» a la pàgina web d'administració (o emprant «yunohost user create <username>» a la línia d'ordres);\n - diagnosticar possibles problemes a través de la secció «Diagnòstics» a la pàgina web d'administració (o emprant «yunohost diagnosis run» a la línia d'ordres);\n - llegir les seccions «Finalizing your setup» i «Getting to know YunoHost» a la documentació per administradors: https://yunohost.org/admindoc.", "yunohost_postinstall_end_tip": "S'ha completat la post-instal·lació. Per acabar la configuració, considereu:\n - diagnosticar possibles problemes a través de la secció «Diagnòstics» a la pàgina web d'administració (o emprant «yunohost diagnosis run» a la línia d'ordres);\n - llegir les seccions «Finalizing your setup» i «Getting to know YunoHost» a la documentació per administradors: https://yunohost.org/admindoc.",
"diagnosis_services_running": "El servei {service} s'està executant!", "diagnosis_services_running": "El servei {service} s'està executant!",
"diagnosis_services_conf_broken": "La configuració pel servei {service} està trencada!", "diagnosis_services_conf_broken": "La configuració pel servei {service} està trencada!",
"diagnosis_ports_needed_by": "És necessari exposar aquest port per a les funcions {category} (servei {service})", "diagnosis_ports_needed_by": "És necessari exposar aquest port per a les funcions {category} (servei {service})",
@ -451,7 +451,7 @@
"certmanager_warning_subdomain_dns_record": "El subdomini «{subdomain}» no resol a la mateixa adreça IP que «{domain}». Algunes funcions no estaran disponibles fins que no s'hagi arreglat i s'hagi regenerat el certificat.", "certmanager_warning_subdomain_dns_record": "El subdomini «{subdomain}» no resol a la mateixa adreça IP que «{domain}». Algunes funcions no estaran disponibles fins que no s'hagi arreglat i s'hagi regenerat el certificat.",
"domain_cannot_add_xmpp_upload": "No podeu afegir dominis començant per «xmpp-upload.». Aquest tipus de nom està reservat per a la funció de pujada de XMPP integrada a YunoHost.", "domain_cannot_add_xmpp_upload": "No podeu afegir dominis començant per «xmpp-upload.». Aquest tipus de nom està reservat per a la funció de pujada de XMPP integrada a YunoHost.",
"diagnosis_display_tip": "Per veure els problemes que s'han trobat, podeu anar a la secció de Diagnòstic a la pàgina web d'administració, o utilitzar « yunohost diagnostic show --issues --human-readable» a la línia de comandes.", "diagnosis_display_tip": "Per veure els problemes que s'han trobat, podeu anar a la secció de Diagnòstic a la pàgina web d'administració, o utilitzar « yunohost diagnostic show --issues --human-readable» a la línia de comandes.",
"diagnosis_mail_outgoing_port_25_blocked_relay_vpn": "Alguns proveïdors no permeten desbloquejar el port de sortida 25 perquè no els hi importa la Neutralitat de la Xarxa.<br> - Alguns d'ells ofereixen l'alternativa d'<a href='https://yunohost.org/#/email_configure_relay'>utilitzar un relay de servidor de correu electrònic</a> tot i que implica que el relay serà capaç d'espiar el tràfic de correus electrònics.<br>- Una alternativa respectuosa amb la privacitat és utilitzar una VPN *amb una IP pública dedicada* per sortejar aquest tipus de limitació. Vegeu <a href='https://yunohost.org/#/vpn_advantage'>https://yunohost.org/#/vpn_advantage</a><br>- També podeu considerar canviar-vos a <a href='https://yunohost.org/#/isp'>un proveïdor més respectuós de la neutralitat de la xarxa</a>", "diagnosis_mail_outgoing_port_25_blocked_relay_vpn": "Alguns proveïdors no permeten desbloquejar el port de sortida 25 perquè no els hi importa la Neutralitat de la Xarxa.<br> - Alguns d'ells ofereixen l'alternativa d'<a href='https://yunohost.org/#/email_configure_relay'>utilitzar un relay de servidor de correu electrònic</a> tot i que implica que el relay serà capaç d'espiar el tràfic de correus electrònics.<br>- Una alternativa respectuosa amb la privacitat és utilitzar una VPN *amb una IP pública dedicada* per sortejar aquestos tipus de limitacions. Vegeu <a href='https://yunohost.org/#/vpn_advantage'>https://yunohost.org/#/vpn_advantage</a><br>- També podeu considerar canviar-vos a <a href='https://yunohost.org/#/isp'>un proveïdor més respectuós de la neutralitat de la xarxa</a>",
"diagnosis_ip_global": "IP global: <code>{global}</code>", "diagnosis_ip_global": "IP global: <code>{global}</code>",
"diagnosis_ip_local": "IP local: <code>{local}</code>", "diagnosis_ip_local": "IP local: <code>{local}</code>",
"diagnosis_dns_point_to_doc": "Consulteu la documentació a <a href='https://yunohost.org/dns_config'>https://yunohost.org/dns_config</a> si necessiteu ajuda per configurar els registres DNS.", "diagnosis_dns_point_to_doc": "Consulteu la documentació a <a href='https://yunohost.org/dns_config'>https://yunohost.org/dns_config</a> si necessiteu ajuda per configurar els registres DNS.",
@ -479,17 +479,17 @@
"diagnosis_http_nginx_conf_not_up_to_date_details": "Per arreglar el problema, mireu les diferències amb la línia d'ordres utilitzant <cmd>yunohost tools regen-conf nginx --dry-run --with-diff</cmd> i si els canvis us semblen bé els podeu fer efectius utilitzant <cmd>yunohost tools regen-conf nginx --force</cmd>.", "diagnosis_http_nginx_conf_not_up_to_date_details": "Per arreglar el problema, mireu les diferències amb la línia d'ordres utilitzant <cmd>yunohost tools regen-conf nginx --dry-run --with-diff</cmd> i si els canvis us semblen bé els podeu fer efectius utilitzant <cmd>yunohost tools regen-conf nginx --force</cmd>.",
"diagnosis_mail_ehlo_unreachable_details": "No s'ha pogut establir una connexió amb el vostre servidor en el port 25 amb IPv{ipversion}. Sembla que el servidor no és accessible.<br>1. La causa més comú per aquest problema és que el port 25 <a href='https://yunohost.org/isp_box_config'>no està correctament redireccionat cap al vostre servidor</a>.<br>2. També us hauríeu d'assegurar que el servei postfix estigui funcionant.<br>3. En configuracions més complexes: assegureu-vos que que no hi hagi cap tallafoc ni reverse-proxy interferint.", "diagnosis_mail_ehlo_unreachable_details": "No s'ha pogut establir una connexió amb el vostre servidor en el port 25 amb IPv{ipversion}. Sembla que el servidor no és accessible.<br>1. La causa més comú per aquest problema és que el port 25 <a href='https://yunohost.org/isp_box_config'>no està correctament redireccionat cap al vostre servidor</a>.<br>2. També us hauríeu d'assegurar que el servei postfix estigui funcionant.<br>3. En configuracions més complexes: assegureu-vos que que no hi hagi cap tallafoc ni reverse-proxy interferint.",
"diagnosis_mail_ehlo_wrong_details": "El EHLO rebut pel servidor de diagnòstic remot amb IPv{ipversion} és diferent al domini del vostre servidor.<br>EHLO rebut: <code>{wrong_ehlo}</code><br>Esperat: <code>{right_ehlo}</code><br>La causa més habitual d'aquest problema és que el port 25 <a href='https://yunohost.org/isp_box_config'>no està correctament reenviat cap al vostre servidor</a>. També podeu comprovar que no hi hagi un tallafocs o un reverse-proxy interferint.", "diagnosis_mail_ehlo_wrong_details": "El EHLO rebut pel servidor de diagnòstic remot amb IPv{ipversion} és diferent al domini del vostre servidor.<br>EHLO rebut: <code>{wrong_ehlo}</code><br>Esperat: <code>{right_ehlo}</code><br>La causa més habitual d'aquest problema és que el port 25 <a href='https://yunohost.org/isp_box_config'>no està correctament reenviat cap al vostre servidor</a>. També podeu comprovar que no hi hagi un tallafocs o un reverse-proxy interferint.",
"diagnosis_mail_fcrdns_dns_missing": "No hi ha cap DNS invers definit per IPv{ipversion}. Alguns correus electrònics poden no entregar-se o poden ser marcats com a correu brossa.", "diagnosis_mail_fcrdns_dns_missing": "No hi ha cap DNS invers definit per IPv{ipversion}. Alguns correus electrònics poden no entregar-se o ser marcats com a correu brossa.",
"diagnosis_mail_blacklist_website": "Després d'haver identificat perquè estàveu llistats i haver arreglat el problema, no dubteu en demanar que la vostra IP o domini sigui eliminat de {blacklist_website}", "diagnosis_mail_blacklist_website": "Després d'haver identificat perquè estàveu llistats i arreglat el problema, no dubteu a demanar que la vostra IP o domini sigui eliminat de {blacklist_website}",
"diagnosis_ports_partially_unreachable": "El port {port} no és accessible des de l'exterior amb IPv{failed}.", "diagnosis_ports_partially_unreachable": "El port {port} no és accessible des de l'exterior amb IPv{failed}.",
"diagnosis_http_partially_unreachable": "El domini {domain} sembla que no és accessible utilitzant HTTP des de l'exterior de la xarxa local amb IPv{failed}, tot i que funciona amb IPv{passed}.", "diagnosis_http_partially_unreachable": "El domini {domain} sembla que no és accessible utilitzant HTTP des de l'exterior de la xarxa local amb IPv{failed}, tot i que funciona amb IPv{passed}.",
"diagnosis_mail_fcrdns_nok_details": "Hauríeu d'intentar configurar primer el DNS invers amb <code>{ehlo_domain}</code> en la interfície del router o en la interfície del vostre allotjador. (Alguns allotjadors requereixen que obris un informe de suport per això).", "diagnosis_mail_fcrdns_nok_details": "Hauríeu d'intentar primer configurar el DNS invers amb <code>{ehlo_domain}</code> en la interfície del router o en la interfície del vostre allotjador. (Alguns proveïdors d'allotjament requereixen que obris un informe de suport per això).",
"diagnosis_mail_fcrdns_nok_alternatives_4": "Alguns proveïdors no permeten configurar el DNS invers (o aquesta funció pot no funcionar…). Si teniu problemes a causa d'això, considereu les solucions següents:<br> - Alguns proveïdors d'accés a internet (ISP) donen l'alternativa de <a href='https://yunohost.org/#/email_configure_relay'> utilitzar un relay de servidor de correu electrònic</a> tot i que implica que el relay podrà espiar el trànsit de correus electrònics.<br>- Una alternativa respectuosa amb la privacitat és utilitzar una VPN *amb una IP pública dedicada* per sobrepassar aquest tipus de limitacions. Mireu <a href='https://yunohost.org/#/vpn_advantage'>https://yunohost.org/#/vpn_advantage</a><br>- O es pot <a href='https://yunohost.org/#/isp'>canviar a un proveïdor diferent</a>", "diagnosis_mail_fcrdns_nok_alternatives_4": "Alguns proveïdors no permeten configurar el DNS invers (o aquesta funció pot no funcionar…). Si teniu problemes a causa d'això, considereu les solucions següents:<br> - Alguns proveïdors d'accés a internet (ISP) donen l'alternativa de <a href='https://yunohost.org/#/email_configure_relay'> utilitzar un relay de servidor de correu electrònic</a> tot i que implica que el relay podrà espiar el trànsit de correus electrònics.<br>- Una alternativa respectuosa amb la privacitat és utilitzar una VPN *amb una IP pública dedicada* per sobrepassar aquest tipus de limitacions. Mireu <a href='https://yunohost.org/#/vpn_advantage'>https://yunohost.org/#/vpn_advantage</a><br>- O es pot <a href='https://yunohost.org/#/isp'>canviar a un proveïdor diferent</a>",
"diagnosis_mail_fcrdns_nok_alternatives_6": "Alguns proveïdors no permeten configurar el vostre DNS invers (o la funció no els hi funciona…). Si el vostre DNS invers està correctament configurat per IPv4, podeu intentar deshabilitar l'ús de IPv6 per a enviar correus electrònics utilitzant <cmd>yunohost settings set smtp.allow_ipv6 -v off</cmd>. Nota: aquesta última solució implica que no podreu enviar o rebre correus electrònics cap a els pocs servidors que hi ha que només tenen IPv-6.", "diagnosis_mail_fcrdns_nok_alternatives_6": "Alguns proveïdors no permeten configurar el vostre DNS invers (o la funció no els hi funciona…). Si el vostre DNS invers està correctament configurat per IPv4, podeu intentar deshabilitar l'ús de IPv6 per a enviar correus electrònics utilitzant <cmd>yunohost settings set email.smtp.smtp_allow_ipv6 -v off</cmd>. Nota: aquesta última solució implica que no podreu enviar o rebre correus electrònics cap a els pocs servidors que hi ha que només tenen IPv-6.",
"diagnosis_http_hairpinning_issue_details": "Això és probablement a causa del router del vostre proveïdor d'accés a internet. El que fa, que gent de fora de la xarxa local pugui accedir al servidor sense problemes, però no la gent de dins la xarxa local (com vostè probablement) quan s'utilitza el nom de domini o la IP global. Podreu segurament millorar la situació fent una ullada a <a href='https://yunohost.org/dns_local_network'>https://yunohost.org/dns_local_network</a>", "diagnosis_http_hairpinning_issue_details": "Això és probablement a causa del router del vostre proveïdor d'accés a internet. El que fa, que gent de fora de la xarxa local pugui accedir al servidor sense problemes, però no la gent de dins la xarxa local (com vostè probablement) quan s'utilitza el nom de domini o la IP global. Podreu segurament millorar la situació fent una ullada a <a href='https://yunohost.org/dns_local_network'>https://yunohost.org/dns_local_network</a>",
"backup_archive_cant_retrieve_info_json": "No s'ha pogut carregar la informació de l'arxiu «{archive}»... No s'ha pogut obtenir el fitxer info.json (o no és un fitxer json vàlid).", "backup_archive_cant_retrieve_info_json": "No s'ha pogut carregar la informació de l'arxiu «{archive}»... No s'ha pogut obtenir el fitxer info.json (o no és un fitxer json vàlid).",
"backup_archive_corrupted": "Sembla que l'arxiu de la còpia de seguretat «{archive}» està corromput : {error}", "backup_archive_corrupted": "Sembla que l'arxiu de la còpia de seguretat «{archive}» està corromput : {error}",
"certmanager_domain_not_diagnosed_yet": "Encara no hi ha cap resultat de diagnòstic per al domini {domain}. Torneu a executar el diagnòstic per a les categories «Registres DNS» i «Web» en la secció de diagnòstic per comprovar que el domini està preparat per a Let's Encrypt. (O si sabeu el que esteu fent, utilitzant «--no-checks» per deshabilitar les comprovacions.)", "certmanager_domain_not_diagnosed_yet": "Encara no hi ha cap resultat de diagnòstic per al domini {domain}. Torneu a executar el diagnòstic per a les categories «Registres DNS» i «Web» en la secció de diagnòstic per comprovar que el domini està preparat per a Let's Encrypt. (O si sabeu el que esteu fent, utilitzant «--no-checks» per deshabilitar aquestes comprovacions.)",
"diagnosis_ip_no_ipv6_tip": "Utilitzar una IPv6 no és obligatori per a que funcioni el servidor, però és millor per la salut d'Internet en conjunt. La IPv6 hauria d'estar configurada automàticament pel sistema o pel proveïdor si està disponible. Si no és el cas, pot ser necessari configurar alguns paràmetres més de forma manual tal i com s'explica en la documentació disponible aquí: <a href='https://yunohost.org/#/ipv6'>https://yunohost.org/#/ipv6</a>. Si no podeu habilitar IPv6 o us sembla massa tècnic, podeu ignorar aquest avís sense problemes.", "diagnosis_ip_no_ipv6_tip": "Utilitzar una IPv6 no és obligatori per a que funcioni el servidor, però és millor per la salut d'Internet en conjunt. La IPv6 hauria d'estar configurada automàticament pel sistema o pel proveïdor si està disponible. Si no és el cas, pot ser necessari configurar alguns paràmetres més de forma manual tal i com s'explica en la documentació disponible aquí: <a href='https://yunohost.org/#/ipv6'>https://yunohost.org/#/ipv6</a>. Si no podeu habilitar IPv6 o us sembla massa tècnic, podeu ignorar aquest avís sense problemes.",
"diagnosis_domain_expiration_not_found": "No s'ha pogut comprovar la data d'expiració d'alguns dominis", "diagnosis_domain_expiration_not_found": "No s'ha pogut comprovar la data d'expiració d'alguns dominis",
"diagnosis_domain_not_found_details": "El domini {domain} no existeix en la base de dades WHOIS o ha expirat!", "diagnosis_domain_not_found_details": "El domini {domain} no existeix en la base de dades WHOIS o ha expirat!",
@ -512,8 +512,8 @@
"pattern_email_forward": "Ha de ser una adreça de correu vàlida, s'accepta el símbol «+» (per exemple, algu+etiqueta@exemple.cat)", "pattern_email_forward": "Ha de ser una adreça de correu vàlida, s'accepta el símbol «+» (per exemple, algu+etiqueta@exemple.cat)",
"invalid_number": "Ha de ser una xifra", "invalid_number": "Ha de ser una xifra",
"invalid_regex": "Regex no vàlid: «{regex}»", "invalid_regex": "Regex no vàlid: «{regex}»",
"global_settings_setting_smtp_relay_password": "Tramesa de la contrasenya d'amfitrió SMTP", "global_settings_setting_smtp_relay_password": "Contrasenya de retransmissió SMTP",
"global_settings_setting_smtp_relay_user": "Tramesa de compte d'usuari SMTP", "global_settings_setting_smtp_relay_user": "Usuari de retransmissió SMTP",
"global_settings_setting_smtp_relay_port": "Port de tramesa SMTP", "global_settings_setting_smtp_relay_port": "Port de tramesa SMTP",
"diagnosis_processes_killed_by_oom_reaper": "El sistema ha matat alguns processos recentment perquè s'ha quedat sense memòria. Això acostuma a ser un símptoma de falta de memòria en el sistema o d'un procés que consumeix massa memòria. Llista dels processos que s'han matat:\n{kills_summary}", "diagnosis_processes_killed_by_oom_reaper": "El sistema ha matat alguns processos recentment perquè s'ha quedat sense memòria. Això acostuma a ser un símptoma de falta de memòria en el sistema o d'un procés que consumeix massa memòria. Llista dels processos que s'han matat:\n{kills_summary}",
"diagnosis_package_installed_from_sury_details": "Alguns paquets s'han instal·lat per equivocació des d'un repositori de tercers anomenat Sury. L'equip de YunoHost a millorat l'estratègia per a gestionar aquests paquets, però s'espera que algunes configuracions que han instal·lat aplicacions PHP7.3 a Stretch puguin tenir algunes inconsistències. Per a resoldre aquesta situació, hauríeu d'intentar executar la següent ordre: <cmd>{cmd_to_fix}</cmd>", "diagnosis_package_installed_from_sury_details": "Alguns paquets s'han instal·lat per equivocació des d'un repositori de tercers anomenat Sury. L'equip de YunoHost a millorat l'estratègia per a gestionar aquests paquets, però s'espera que algunes configuracions que han instal·lat aplicacions PHP7.3 a Stretch puguin tenir algunes inconsistències. Per a resoldre aquesta situació, hauríeu d'intentar executar la següent ordre: <cmd>{cmd_to_fix}</cmd>",
@ -522,7 +522,7 @@
"app_manifest_install_ask_is_public": "Aquesta aplicació hauria de ser visible per a visitants anònims?", "app_manifest_install_ask_is_public": "Aquesta aplicació hauria de ser visible per a visitants anònims?",
"app_manifest_install_ask_admin": "Escolliu l'usuari administrador per aquesta aplicació", "app_manifest_install_ask_admin": "Escolliu l'usuari administrador per aquesta aplicació",
"app_manifest_install_ask_password": "Escolliu la contrasenya d'administració per aquesta aplicació", "app_manifest_install_ask_password": "Escolliu la contrasenya d'administració per aquesta aplicació",
"app_manifest_install_ask_path": "Escolliu la ruta en la que s'hauria d'instal·lar aquesta aplicació", "app_manifest_install_ask_path": "Escolliu la ruta de l'URL (després del domini) on s'ha d'instal·lar aquesta aplicació",
"app_manifest_install_ask_domain": "Escolliu el domini en el que s'hauria d'instal·lar aquesta aplicació", "app_manifest_install_ask_domain": "Escolliu el domini en el que s'hauria d'instal·lar aquesta aplicació",
"app_label_deprecated": "Aquesta ordre està desestimada! Si us plau utilitzeu la nova ordre «yunohost user permission update» per gestionar l'etiqueta de l'aplicació.", "app_label_deprecated": "Aquesta ordre està desestimada! Si us plau utilitzeu la nova ordre «yunohost user permission update» per gestionar l'etiqueta de l'aplicació.",
"app_argument_password_no_default": "Hi ha hagut un error al analitzar l'argument de la contrasenya «{name}»: l'argument de contrasenya no pot tenir un valor per defecte per raons de seguretat", "app_argument_password_no_default": "Hi ha hagut un error al analitzar l'argument de la contrasenya «{name}»: l'argument de contrasenya no pot tenir un valor per defecte per raons de seguretat",
@ -533,7 +533,7 @@
"postinstall_low_rootfsspace": "El sistema de fitxers arrel té un total de menys de 10 GB d'espai, el que es preocupant! És molt probable que us quedeu sense espai ràpidament! Es recomana tenir un mínim de 16 GB per al sistema de fitxers arrel. Si voleu instal·lar YunoHost tot i aquest avís, torneu a executar la postinstal·lació amb --force-diskspace", "postinstall_low_rootfsspace": "El sistema de fitxers arrel té un total de menys de 10 GB d'espai, el que es preocupant! És molt probable que us quedeu sense espai ràpidament! Es recomana tenir un mínim de 16 GB per al sistema de fitxers arrel. Si voleu instal·lar YunoHost tot i aquest avís, torneu a executar la postinstal·lació amb --force-diskspace",
"diagnosis_rootfstotalspace_critical": "El sistema de fitxers arrel només té {space} en total i és preocupant! És molt probable que us quedeu sense espai ràpidament! Es recomanar tenir un mínim de 16 GB per al sistema de fitxers arrel.", "diagnosis_rootfstotalspace_critical": "El sistema de fitxers arrel només té {space} en total i és preocupant! És molt probable que us quedeu sense espai ràpidament! Es recomanar tenir un mínim de 16 GB per al sistema de fitxers arrel.",
"diagnosis_rootfstotalspace_warning": "El sistema de fitxers arrel només té {space} en total. Això no hauria de causar cap problema, però haureu de parar atenció ja que us podrieu quedar sense espai ràpidament… Es recomanar tenir un mínim de 16 GB per al sistema de fitxers arrel.", "diagnosis_rootfstotalspace_warning": "El sistema de fitxers arrel només té {space} en total. Això no hauria de causar cap problema, però haureu de parar atenció ja que us podrieu quedar sense espai ràpidament… Es recomanar tenir un mínim de 16 GB per al sistema de fitxers arrel.",
"diagnosis_sshd_config_inconsistent": "Sembla que el port SSH s'ha modificat manualment a /etc/ssh/sshd_config. Des de YunoHost 4.2, hi ha un nou paràmetre global «security.ssh.port» per evitar modificar manualment la configuració.", "diagnosis_sshd_config_inconsistent": "Sembla que el port SSH s'ha modificat manualment a /etc/ssh/sshd_config. Des de YunoHost 4.2, hi ha un nou paràmetre global «security.ssh.ssh_port» per evitar modificar manualment la configuració.",
"diagnosis_sshd_config_insecure": "Sembla que la configuració SSH s'ha modificat manualment, i no es segura ha que no conté la directiva «AllowGroups» o «AllowUsers» per limitar l'accés a usuaris autoritzats.", "diagnosis_sshd_config_insecure": "Sembla que la configuració SSH s'ha modificat manualment, i no es segura ha que no conté la directiva «AllowGroups» o «AllowUsers» per limitar l'accés a usuaris autoritzats.",
"backup_create_size_estimation": "L'arxiu tindrà aproximadament {size} de dades.", "backup_create_size_estimation": "L'arxiu tindrà aproximadament {size} de dades.",
"app_restore_script_failed": "S'ha produït un error en el script de restauració de l'aplicació", "app_restore_script_failed": "S'ha produït un error en el script de restauració de l'aplicació",
@ -544,5 +544,242 @@
"global_settings_setting_postfix_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor Postfix. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", "global_settings_setting_postfix_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor Postfix. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)",
"global_settings_setting_ssh_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor SSH. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat). Visita https://infosec.mozilla.org/guidelines/openssh (anglés) per mes informació.", "global_settings_setting_ssh_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor SSH. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat). Visita https://infosec.mozilla.org/guidelines/openssh (anglés) per mes informació.",
"global_settings_setting_smtp_allow_ipv6_help": "Permet l'ús de IPv6 per rebre i enviar correus electrònics", "global_settings_setting_smtp_allow_ipv6_help": "Permet l'ús de IPv6 per rebre i enviar correus electrònics",
"global_settings_setting_smtp_relay_enabled_help": "L'amfitrió de tramesa SMTP que s'ha d'utilitzar per enviar correus electrònics en lloc d'aquesta instància de YunoHost. És útil si esteu en una de les següents situacions: el port 25 està bloquejat per el vostre proveïdor d'accés a internet o proveïdor de servidor privat virtual, si teniu una IP residencial llistada a DUHL, si no podeu configurar el DNS invers o si el servidor no està directament exposat a internet i voleu utilitzar-ne un altre per enviar correus electrònics." "global_settings_setting_smtp_relay_enabled_help": "L'amfitrió de tramesa SMTP que s'ha d'utilitzar per enviar correus electrònics en lloc d'aquesta instància de YunoHost. És útil si esteu en una de les següents situacions: el port 25 està bloquejat per el vostre proveïdor d'accés a internet o proveïdor de servidor privat virtual, si teniu una IP residencial llistada a DUHL, si no podeu configurar el DNS invers o si el servidor no està directament exposat a internet i voleu utilitzar-ne un altre per enviar correus electrònics.",
"config_validate_date": "Hauria de ser una data vàlida com en el format AAAA-MM-DD",
"config_validate_email": "Hauria de ser un correu electrònic vàlid",
"app_failed_to_upgrade_but_continue": "L'aplicació {failed_app} no s'ha pogut actualitzar. Continueu amb les properes actualitzacions tal com se sol·licita. Executeu «yunohost log show {operation_logger_name}» per veure el registre d'errors",
"app_not_enough_disk": "Aquesta aplicació requereix {required} espai lliure.",
"app_not_upgraded_broken_system": "L'aplicació «{failed_app}» no s'ha pogut actualitzar i ha posat el sistema en un estat trencat i, com a conseqüència, s'han cancel·lat les actualitzacions de les aplicacions següents: {apps}",
"apps_failed_to_upgrade": "No s'han pogut actualitzar aquestes aplicacions: {apps}",
"app_arch_not_supported": "Aquesta aplicació només es pot instal·lar a les arquitectures {required}, però l'arquitectura del vostre servidor és {current}",
"app_resource_failed": "No s'ha pogut subministrar, desaprovisionar o actualitzar recursos per a {app}: {error}",
"app_yunohost_version_not_supported": "Aquesta aplicació requereix YunoHost >= {required} però la versió instal·lada actual és {current}",
"config_action_failed": "No s'ha pogut executar l'acció «{action}»: {error}",
"config_apply_failed": "No s'ha pogut aplicar la configuració nova: {error}",
"config_validate_color": "Hauria de ser un color hexadecimal RGB vàlid",
"app_config_unable_to_apply": "No s'han pogut aplicar els valors del tauler de configuració.",
"app_failed_to_download_asset": "No s'ha pogut baixar el recurs «{source_id}» ({url}) per a {app}: {out}",
"app_not_upgraded_broken_system_continue": "L'aplicació «{failed_app}» no s'ha pogut actualitzar i ha posat el sistema en un estat trencat (per tant, s'ignora --continue-on-failure) i, com a conseqüència, s'han cancel·lat les actualitzacions de les aplicacions següents: {apps}",
"config_forbidden_readonly_type": "El tipus «{type}» no es pot establir com a només lectura; utilitzeu un altre tipus per representar aquest valor (identificador d'argument rellevant: «{id}»).",
"app_manifest_install_ask_init_admin_permission": "Qui hauria de tenir accés a les funcions d'administració d'aquesta aplicació? (Això es pot canviar més endavant)",
"admins": "Administradors",
"all_users": "Tots els usuaris de YunoHost",
"app_action_failed": "No s'ha pogut executar l'acció {action} per a l'aplicació {app}",
"app_manifest_install_ask_init_main_permission": "Qui hauria de tenir accés a aquesta aplicació? (Això es pot canviar més endavant)",
"ask_admin_fullname": "Nom complet de l'administrador",
"certmanager_cert_install_failed": "La instal·lació del certificat de Let's Encrypt ha fallat per a {domains}",
"certmanager_cert_install_failed_selfsigned": "La instal·lació del certificat autofirmat ha fallat per a {domains}",
"certmanager_cert_renew_failed": "La renovació del certificat de Let's Encrypt ha fallat per a {domains}",
"config_action_disabled": "No s'ha pogut executar l'acció «{action}» perquè està desactivada, assegureu-vos de complir les seves limitacions. ajuda: {help}",
"config_forbidden_keyword": "La paraula clau «{keyword}» està reservada, no podeu crear ni utilitzar un tauler de configuració amb una pregunta amb aquest identificador.",
"config_no_panel": "No s'ha trobat cap tauler de configuració.",
"config_validate_time": "Hauria de ser una hora vàlida com HH:MM",
"config_validate_url": "Hauria de ser un URL web vàlid",
"app_change_url_failed": "No s'ha pogut canviar l'URL per a {app}: {error}",
"app_change_url_require_full_domain": "{app} no es pot moure a aquest URL nou perquè requereix un domini complet (és a dir, amb el camí = /)",
"app_change_url_script_failed": "S'ha produït un error a l'script de canvi d'URL",
"app_config_unable_to_read": "No s'han pogut llegir els valors del tauler de configuració.",
"ask_admin_username": "Nom d'usuari de l'administrador",
"ask_fullname": "Nom complet",
"config_unknown_filter_key": "La clau de filtre «{filter_key}» és incorrecta.",
"ask_dyndns_recovery_password_explain_unavailable": "Aquest domini DynDNS ja està registrat. Si sou la persona que va registrar originalment aquest domini, podeu introduir la contrasenya de recuperació per recuperar aquest domini.",
"app_not_enough_ram": "Aquesta aplicació requereix RAM {required} per instal·lar/actualitzar, però només {current} està disponible ara mateix.",
"ask_dyndns_recovery_password_explain": "Si us plau, trieu una contrasenya de recuperació per al vostre domini DynDNS, en cas que hàgiu de restablir-la més tard.",
"ask_dyndns_recovery_password": "Contrasenya de recuperació de DynDNS",
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Introduïu la contrasenya de recuperació d'aquest domini DynDNS.",
"config_cant_set_value_on_section": "No podeu establir un sol valor en una secció sencera de configuració.",
"diagnosis_http_special_use_tld": "El domini {domain} es basa en un domini de primer nivell (TLD) d'ús especial com ara .local o .test i, per tant, no s'espera que estigui exposat fora de la xarxa local.",
"diagnosis_apps_deprecated_practices": "La versió instal·lada d'aquesta aplicació encara utilitza algunes pràctiques d'empaquetament molt antigues i obsoletes. Realment hauríeu de considerar actualitzar-lo.",
"diagnosis_high_number_auth_failures": "Recentment, hi ha hagut un nombre massa alt d'errors d'autenticació. És possible que vulgueu assegurar-vos que fail2ban s'està executant i està configurat correctament, o bé utilitzar un port personalitzat per a SSH tal com s'explica a https://yunohost.org/security.",
"apps_failed_to_upgrade_line": "\n * {app_id} (per veure el registre corresponent, feu «yunohost log show {operation_logger_name}»)",
"diagnosis_description_apps": "Aplicacions",
"diagnosis_using_yunohost_testing": "<cmd>apt</cmd> (el gestor de paquets del sistema) està configurat actualment per instal·lar qualsevol actualització de «prova» per al nucli de YunoHost.",
"domain_config_acme_eligible_explain": "Aquest domini no sembla preparat per a un certificat Let's Encrypt. Comproveu la vostra configuració de DNS i la visibilitat del servidor HTTP. La secció \"Registres DNS\" i \"Web\" a <a href='#/diagnosis'>la pàgina de diagnòstic</a> us poden ajudar a entendre què està mal configurat.",
"domain_config_api_protocol": "Protocol API",
"domain_dns_push_already_up_to_date": "Registres ja actualitzats, res a fer.",
"confirm_notifications_read": "ADVERTÈNCIA: hauríeu de comprovar les notificacions de l'aplicació anteriors abans de continuar, és possible que hi hagi coses importants a saber. [{answers}]",
"diagnosis_sshd_config_inconsistent_details": "Si us plau, executeu <cmd>yunohost settings set security.ssh.ssh_port -v YOUR_SSH_PORT</cmd> per definir el port SSH i comproveu <cmd>yunohost tools regen-conf ssh --dry-run --with-diff</cmd> i <cmd>yunohost tools regen-conf ssh --force</cmd> per restablir la vostra configuració a la recomanació de YunoHost.",
"disk_space_not_sufficient_install": "No queda prou espai al disc per instal·lar aquesta aplicació",
"domain_config_mail_in": "Correus entrants",
"domain_config_mail_out": "Correus sortints",
"domain_dns_push_managed_in_parent_domain": "La funció de configuració automàtica de DNS es gestiona al domini principal {parent_domain}.",
"diagnosis_apps_broken": "Aquesta aplicació està actualment marcada com a trencada al catàleg d'aplicacions de YunoHost. Pot ser un problema temporal mentre els responsables intenten solucionar el problema. Mentrestant, l'actualització d'aquesta aplicació està desactivada.",
"diagnosis_apps_not_in_app_catalog": "Aquesta aplicació no es troba al catàleg d'aplicacions de YunoHost. Si hi era en el passat i s'ha eliminat, hauríeu de considerar la desinstal·lació d'aquesta aplicació, ja que no rebrà actualitzacions i pot comprometre la integritat i la seguretat del vostre sistema.",
"danger": "Perill:",
"diagnosis_dns_specialusedomain": "El domini {domain} es basa en un domini de primer nivell (TLD) d'ús especial com ara .local o .test i, per tant, no s'espera que tingui registres DNS reals.",
"domain_dns_push_failed_to_authenticate": "No s'ha pogut autenticar a l'API del registrador per al domini «{domain}». El més probable és que les credencials siguin incorrectes (error: {error})",
"diagnosis_ip_no_ipv6_tip_important": "IPv6 normalment l'hauria de configurar automàticament el sistema o el vostre proveïdor si està disponible. En cas contrari, és possible que hàgiu de configurar algunes coses manualment tal com s'explica a la documentació aquí: <a href='https://yunohost.org/#/ipv6'>https://yunohost.org/#/ipv6</a>.",
"diagnosis_using_yunohost_testing_details": "Probablement això està bé si sabeu què feu, però presteu atenció a les notes de la versió abans d'instal·lar les actualitzacions de YunoHost! Si voleu desactivar les actualitzacions de «prova», hauríeu d'eliminar la paraula clau <cmd>testing</cmd> de <cmd>/etc/apt/sources.list.d/yunohost.list</cmd>.",
"disk_space_not_sufficient_update": "No queda prou espai al disc per actualitzar aquesta aplicació",
"domain_config_auth_application_key": "Clau d'aplicació",
"domain_config_auth_application_secret": "Clau secreta d'aplicació",
"domain_config_auth_consumer_key": "Clau del consumidor",
"domain_config_auth_entrypoint": "Punt d'entrada de l'API",
"domain_config_cert_renew_help": "El certificat es renovarà automàticament durant els darrers 15 dies de validesa. Podeu renovar-lo manualment si voleu (no es recomana).",
"domain_config_cert_summary": "Estat del certificat",
"domain_config_cert_validity": "Validesa",
"domain_config_default_app": "Aplicació per defecte",
"domain_config_xmpp": "Missatgeria instantània (XMPP)",
"domain_dns_conf_special_use_tld": "Aquest domini es basa en un domini de primer nivell (TLD) d'ús especial com ara .local o .test i, per tant, no s'espera que tingui registres DNS reals.",
"domain_dns_push_partial_failure": "Registres DNS parcialment actualitzats: s'han notificat alguns avisos/errors.",
"domain_config_auth_secret": "Secret d'autenticació",
"domain_dns_push_failed_to_list": "No s'han pogut llistar les entrades actuals mitjançant l'API del registrador: {error}",
"diagnosis_apps_allgood": "Totes les aplicacions instal·lades respecten les pràctiques bàsiques d'empaquetament",
"diagnosis_apps_issue": "S'ha trobat un problema per a l'aplicació {app}",
"diagnosis_using_stable_codename": "<cmd>apt</cmd> (el gestor de paquets del sistema) està configurat actualment per instal·lar paquets des del nom en codi «stable», en lloc del nom en clau de la versió actual de Debian.",
"domain_config_auth_key": "Clau d'autenticació",
"domain_config_cert_install": "Instal·la el certificat Let's Encrypt",
"domain_config_cert_issuer": "Autoritat de certificació",
"domain_config_cert_no_checks": "Ignorar les comprovacions de diagnòstic",
"domain_config_cert_renew": "Renova el certificat Let's Encrypt",
"domain_config_cert_summary_letsencrypt": "Genial! Esteu utilitzant un certificat de Let's Encrypt vàlid!",
"domain_config_cert_summary_ok": "D'acord, el certificat actual sembla bo!",
"domain_config_cert_summary_selfsigned": "ADVERTIMENT: el certificat actual està signat per ell mateix. Els navegadors mostraran un avís esgarrifós als nous visitants!",
"diagnosis_apps_bad_quality": "Aquesta aplicació està actualment marcada com a trencada al catàleg d'aplicacions de YunoHost. Pot ser un problema temporal mentre els responsables intenten solucionar el problema. Mentrestant, l'actualització d'aquesta aplicació està desactivada.",
"diagnosis_using_stable_codename_details": "Això sol ser causat per una configuració incorrecta del vostre proveïdor d'allotjament. Això és perillós, perquè tan bon punt la propera versió de Debian es converteixi en la nova «stable», <cmd>apt</cmd> voldrà actualitzar tots els paquets del sistema sense passar per un procediment de migració adequat. Es recomana arreglar-ho editant la font d'apt per al dipòsit de Debian bàsic i substituir la paraula clau <cmd>stable</cmd> pel nom en clau de la versió estable actual. El fitxer de configuració corresponent hauria de ser <cmd>/etc/apt/sources.list</cmd>, o un fitxer a <cmd>/etc/apt/sources.list.d/</cmd>.",
"confirm_app_insufficient_ram": "PERILL! Aquesta aplicació requereix {required} de RAM per instal·lar/actualitzar, però només n'hi ha {current} disponibles ara mateix. Fins i tot si aquesta aplicació es pot executar, el seu procés d'instal·lació/actualització requereix una gran quantitat de memòria RAM, de manera que el servidor es pot congelar i fallar miserablement. Si esteu disposat a córrer aquest risc de totes maneres, escriviu «{answers}»",
"diagnosis_apps_outdated_ynh_requirement": "La versió instal·lada d'aquesta aplicació només requereix yunohost >= 2.x o 3.x, la qual cosa acostuma a indicar que no està al dia amb les pràctiques d'empaquetament i els «ajudants» recomanats. Realment hauríeu de considerar actualitzar-la.",
"domain_cannot_add_muc_upload": "No podeu afegir dominis que comencin per 'muc.'. Aquest tipus de nom està reservat per a la funció de xat multiusuari XMPP integrada a YunoHost.",
"domain_config_acme_eligible": "Elegibilitat (per a l') ACME",
"domain_config_auth_token": "Token d'autenticació",
"domain_config_cert_summary_abouttoexpire": "El certificat actual està a punt de caducar. Aviat s'hauria de renovar automàticament.",
"domain_config_cert_summary_expired": "CRÍTIC: el certificat actual no és vàlid! HTTPS no funcionarà en absolut!",
"domain_config_default_app_help": "Es redirigirà automàticament a aquesta aplicació en obrir aquest domini. Si no s'especifica cap aplicació, es redirigeix al formulari d'inici de sessió del portal de l'usuari.",
"domain_config_xmpp_help": "NB: algunes funcions XMPP requeriran que actualitzeu els vostres registres DNS i que regenereu el vostre certificat Let's Encrypt perquè estigui activat",
"domain_dns_push_failed": "L'actualització dels registres DNS ha fallat estrepitosament.",
"domain_dns_push_not_applicable": "La funció de configuració automàtica de DNS no és aplicable al domini {domain}. Hauríeu de configurar manualment els vostres registres DNS seguint la documentació a https://yunohost.org/dns_config.",
"migration_0023_not_enough_space": "Allibereu espai a {path} per executar la migració.",
"log_app_config_set": "Aplica la configuració a l'aplicació «{}»",
"log_domain_dns_push": "Envia registres DNS per al domini «{}»",
"global_settings_setting_nginx_compatibility": "Compatibilitat NGINX",
"migration_0021_still_on_buster_after_main_upgrade": "Alguna cosa ha fallat durant l'actualització principal, sembla que el sistema encara està a Debian Buster",
"migration_ldap_rollback_success": "El sistema s'ha revertit.",
"migration_0024_rebuild_python_venv_in_progress": "Ara s'està intentant reconstruir el virtualenv de Python per a «{app}»",
"migration_description_0023_postgresql_11_to_13": "Migra bases de dades de PostgreSQL 11 a 13",
"migration_description_0025_global_settings_to_configpanel": "Migra l'antiga nomenclatura de configuració global a la nova",
"migration_ldap_backup_before_migration": "Creant una còpia de seguretat de la configuració de les aplicacions i la base de dades LDAP abans de la migració real.",
"migration_ldap_can_not_backup_before_migration": "La còpia de seguretat del sistema no s'ha pogut completar abans que la migració fallés. Error: {error}",
"migration_ldap_migration_failed_trying_to_rollback": "No s'ha pogut migrar... s'està intentant revertir el sistema.",
"password_confirmation_not_the_same": "La contrasenya i la confirmació no coincideixen",
"group_mailalias_add": "L'àlies de correu electrònic «{mail}» s'afegirà al grup «{group}»",
"group_mailalias_remove": "L'àlies de correu electrònic «{mail}» s'eliminarà del grup «{group}»",
"group_user_add": "L'usuari «{user}» s'afegirà al grup «{group}»",
"ldap_server_down": "No es pot arribar al servidor LDAP",
"log_settings_reset_all": "Restableix tots els paràmetres",
"log_settings_set": "Aplica la configuració",
"migration_0021_system_not_fully_up_to_date": "El vostre sistema no està completament actualitzat. Realitzeu una actualització regular abans d'executar la migració.",
"migration_0023_postgresql_13_not_installed": "PostgreSQL 11 està instal·lat, però no PostgreSQL 13!? Alguna cosa estranya podria haver passat al vostre sistema :(...",
"migration_description_0021_migrate_to_bullseye": "Actualitzeu el sistema a Debian Bullseye i YunoHost 11.x",
"user_import_failed": "L'operació d'importació dels usuaris ha fallat completament",
"migration_0023_postgresql_11_not_installed": "PostgreSQL no estava instal·lat al vostre sistema. Res a fer.",
"ldap_server_is_down_restart_it": "El servei LDAP està inactiu, intenteu reiniciar-lo...",
"dyndns_set_recovery_password_invalid_password": "No s'ha pogut establir la contrasenya de recuperació: la contrasenya no és prou forta",
"dyndns_set_recovery_password_unknown_domain": "No s'ha pogut establir la contrasenya de recuperació: domini no registrat",
"dyndns_unsubscribe_already_unsubscribed": "El domini ja està cancel·lat",
"dyndns_unsubscribe_denied": "No s'ha pogut cancel·lar la subscripció del domini: credencials no vàlides",
"dyndns_unsubscribe_failed": "No s'ha pogut cancel·lar la subscripció al domini DynDNS: {error}",
"dyndns_unsubscribed": "S'ha cancel·lat la subscripció al domini DynDNS",
"global_settings_setting_ssh_password_authentication": "Autenticació de contrasenya",
"global_settings_setting_ssh_port": "Port SSH",
"global_settings_setting_pop3_enabled": "Activa POP3",
"global_settings_setting_portal_theme_help": "Més informació sobre la creació de temes de portal personalitzats a https://yunohost.org/theming",
"global_settings_setting_postfix_compatibility": "Compatibilitat Postfix",
"global_settings_setting_security_experimental_enabled_help": "Activa les funcions de seguretat experimentals (no l'habilites si no saps què estàs fent!)",
"global_settings_setting_smtp_relay_host": "Amfitrió de retransmissió SMTP",
"global_settings_setting_smtp_relay_enabled": "Activa la retransmissió SMTP",
"global_settings_setting_ssh_compatibility": "Compatibilitat SSH",
"global_settings_setting_ssh_password_authentication_help": "Permet l'autenticació de contrasenya per a SSH",
"global_settings_setting_user_strength_help": "Aquests requisits només s'apliquen en inicialitzar o canviar la contrasenya",
"global_settings_setting_webadmin_allowlist_enabled": "Activa la lista d'IPs permeses de Webadmin",
"visitors": "Visitants",
"group_user_remove": "L'usuari «{user}» s'eliminarà del grup «{group}»",
"invalid_number_min": "Ha de ser superior a {min}",
"migration_0021_start": "Començant la migració",
"global_settings_setting_webadmin_allowlist_help": "Adreces IP permeses per accedir a Webadmin. La notació CIDR està permesa.",
"app_corrupt_source": "YunoHost ha pogut baixar el recurs «{source_id}» ({url}) per a {app}, però el recurs no coincideix amb la suma de comprovació esperada. Això podria significar que s'ha produït una fallada temporal de la xarxa al vostre servidor, O el responsable de manteniment (o un actor maliciós?) ha canviat d'alguna manera l'actiu i els empaquetadors de YunoHost han d'investigar i actualitzar el manifest de l'aplicació per reflectir aquest canvi.\n Suma de comprovació esperada de sha256: {expected_sha256}\n Suma de comprovació sha256 baixada: {computed_sha256}\n Mida del fitxer baixat: {size}",
"migration_0021_yunohost_upgrade": "S'està iniciant l'actualització de YunoHost...",
"migration_0024_rebuild_python_venv_broken_app": "S'ha omès {app} perquè virtualenv no es pot reconstruir fàcilment per a aquesta aplicació. En comptes d'això, hauríeu de solucionar la situació forçant l'actualització d'aquesta aplicació mitjançant «yunohost app upgrade --force {app}».",
"pattern_fullname": "Ha de ser un nom complet vàlid (almenys tres caràcters)",
"dyndns_subscribe_failed": "No s'ha pogut subscriure el domini DynDNS: {error}",
"invalid_number_max": "Ha de ser inferior a {max}",
"log_domain_config_set": "Actualitza la configuració del domini «{}»",
"migration_0021_patching_sources_list": "Corregint les llistes de fonts...",
"domain_dns_push_success": "Registres DNS actualitzats!",
"domain_dns_pushing": "S'estan enviant els registres DNS...",
"domain_dns_registrar_experimental": "Fins ara, la interfície amb l'API de **{registrar}** no ha estat provada i revisada adequadament per la comunitat YunoHost. El suport és **molt experimental**: aneu amb compte!",
"domain_dns_registrar_managed_in_parent_domain": "Aquest domini és un subdomini de {parent_domain_link}. La configuració del registrador de DNS s'ha de gestionar al tauler de configuració de {parent_domain}.",
"domain_dns_registrar_not_supported": "YunoHost no ha pogut detectar automàticament el registrador que gestiona aquest domini. Hauríeu de configurar manualment les vostres entrades DNS seguint la documentació a https://yunohost.org/dns .",
"domain_dns_registrar_supported": "YunoHost va detectar automàticament que aquest domini el gestiona el registrador **{registrar}**. Si voleu, YunoHost configurarà automàticament aquesta zona DNS, si li proporcioneu les credencials API adequades. Podeu trobar documentació sobre com obtenir les vostres credencials de l'API en aquesta pàgina: https://yunohost.org/registar_api_{registrar}. (També podeu configurar manualment les vostres entrades DNS seguint la documentació a https://yunohost.org/dns )",
"domain_dns_registrar_yunohost": "Aquest domini és un nohost.me / nohost.st / ynh.fr i, per tant, la seva configuració DNS la gestiona automàticament YunoHost sense cap altra configuració. (vegeu l'ordre «yunohost dyndns update»)",
"domain_registrar_is_not_configured": "El registrador encara no està configurat per al domini {domain}.",
"domain_remove_confirm_apps_removal": "Si suprimiu aquest domini, s'eliminaran aquestes aplicacions:\n {apps}\n\n Estàs segur que vols fer-ho? [{answers}]",
"domain_unknown": "Domini «{domain}» desconegut",
"dyndns_no_recovery_password": "No s'ha especificat cap contrasenya de recuperació! En cas que perdeu el control d'aquest domini, haureu de contactar amb un administrador de l'equip de YunoHost!",
"dyndns_set_recovery_password_denied": "No s'ha pogut establir la contrasenya de recuperació: clau no vàlida",
"dyndns_set_recovery_password_failed": "No s'ha pogut establir la contrasenya de recuperació: {error}",
"global_settings_setting_portal_theme": "Tema del portal",
"global_settings_setting_smtp_allow_ipv6": "Permet IPv6",
"global_settings_setting_ssh_port_help": "Es prefereix un port inferior a 1024 per evitar intents d'usurpació per part de serveis que no són administradors a la màquina remota. També hauríeu d'evitar utilitzar un port que ja s'utilitza, com ara 80 o 443.",
"log_backup_create": "Crea un arxiu de còpia de seguretat",
"service_description_postgresql": "Emmagatzema dades de l'aplicació (base de dades SQL)",
"service_description_yunomdns": "Us permet arribar al vostre servidor mitjançant 'yunohost.local' a la vostra xarxa local",
"dyndns_set_recovery_password_success": "S'ha establert la contrasenya de recuperació!",
"dyndns_subscribed": "Domini DynDNS subscrit",
"global_settings_reset_success": "Restableix la configuració global",
"global_settings_setting_backup_compress_tar_archives": "Comprimir còpies de seguretat",
"global_settings_setting_dns_exposure_help": "Nota: això només afecta la configuració de DNS recomanada i les comprovacions de diagnòstic. Això no afecta les configuracions del sistema.",
"global_settings_setting_nginx_redirect_to_https": "Força HTTPS",
"global_settings_setting_passwordless_sudo": "Permet als administradors utilitzar «sudo» sense tornar a escriure les seves contrasenyes",
"global_settings_setting_pop3_enabled_help": "Habilita el protocol POP3 per al servidor de correu",
"global_settings_setting_security_experimental_enabled": "Característiques de seguretat experimentals",
"global_settings_setting_webadmin_allowlist_enabled_help": "Permet que només algunes IPs accedeixin a Webadmin.",
"group_no_change": "No hi ha res a canviar per al grup «{group}»",
"group_update_aliases": "S'estan actualitzant els àlies per al grup «{group}»",
"invalid_shell": "Shell no vàlid: {shell}",
"ldap_attribute_already_exists": "L'atribut LDAP «{attribute}» ja existeix amb el valor «{value}»",
"log_resource_snippet": "Aprovisionament/desprovisionament/actualització d'un recurs",
"migration_0021_cleaning_up": "Netejar la memòria cau i els paquets que ja no són útils...",
"migration_0021_modified_files": "Tingueu en compte que s'ha trobat que els fitxers següents s'han modificat manualment i es poden sobreescriure després de l'actualització: {manually_modified_files}",
"migration_0024_rebuild_python_venv_disclaimer_base": "Després de l'actualització, algunes aplicacions de Python s'han de reconstruir parcialment per convertir-se a la nova versió de Python distribuïda amb Debian (en termes tècnics: cal recrear el que s'anomena «virtualenv»). Mentrestant, aquestes aplicacions Python poden no funcionar. YunoHost pot intentar reconstruir el virtualenv per a alguns d'ells, tal com es detalla a continuació. Per a altres aplicacions, o si l'intent de reconstrucció falla, haureu de forçar manualment una actualització d'aquestes aplicacions.",
"migration_0024_rebuild_python_venv_disclaimer_ignored": "Els virtualenvs no es poden reconstruir automàticament per a aquestes aplicacions. Heu de forçar una actualització per a aquestes, que es pot fer des de la línia d'ordres amb: «yunohost app upgrade --force APP»: {ignored_apps}",
"migration_description_0022_php73_to_php74_pools": "Migra els fitxers de configuració «pool» php7.3-fpm a php7.4",
"migration_description_0024_rebuild_python_venv": "Repara l'aplicació Python després de la migració",
"other_available_options": "... i {n} altres opcions disponibles no es mostren",
"permission_cant_add_to_all_users": "El permís {permission} no es pot afegir a tots els usuaris.",
"dyndns_too_many_requests": "El servei dyndns de YunoHost ha rebut massa sol·licituds de la vostra part, espereu una hora més o menys abans de tornar-ho a provar.",
"global_settings_setting_admin_strength_help": "Aquests requisits només s'apliquen en inicialitzar o canviar la contrasenya",
"global_settings_setting_dns_exposure": "Versions IP a tenir en compte per a la configuració i el diagnòstic de DNS",
"global_settings_setting_nginx_redirect_to_https_help": "Redirigeix les sol·licituds HTTP a HTTPs de manera predeterminada (NO HO DESACTIVEU tret que sapigueu realment què esteu fent!)",
"global_settings_setting_root_access_explain": "Als sistemes Linux, «root» és l'administrador absolut. En el context de YunoHost, l'inici de sessió SSH «root» directe està desactivat per defecte, excepte des de la xarxa local del servidor. Els membres del grup «admins» poden utilitzar l'ordre sudo per actuar com a root des de la línia d'ordres. Tanmateix, pot ser útil tenir una contrasenya de root (robusta) per depurar el sistema si per algun motiu els administradors habituals ja no poden iniciar sessió.",
"global_settings_setting_root_password": "Nova contrasenya de root",
"global_settings_setting_root_password_confirm": "Nova contrasenya de root (confirmeu)",
"global_settings_setting_ssowat_panel_overlay_enabled": "Habiliteu el petit quadrat de drecera del portal «YunoHost» a les aplicacions",
"global_settings_setting_webadmin_allowlist": "Llista d'IPs permeses de Webadmin",
"invalid_credentials": "La contrasenya o el nom d'usuari no són vàlids",
"log_dyndns_unsubscribe": "Cancel·la la subscripció a un subdomini de YunoHost «{}»",
"log_settings_reset": "Restableix la configuració",
"log_user_import": "Importa usuaris",
"migration_0021_general_warning": "Tingueu en compte que aquesta migració és una operació delicada. L'equip de YunoHost ha fet tot el possible per revisar-la i provar-la, però la migració encara podria trencar parts del sistema o de les seves aplicacions.\n\n Per tant, es recomana:\n - Feu una còpia de seguretat de qualsevol dada o aplicació crítica. Més informació a https://yunohost.org/backup ;\n - Tingueu paciència després d'iniciar la migració: depenent de la vostra connexió a Internet i el maquinari, l'actualització completa pot prendre fins a unes hores.",
"migration_0021_main_upgrade": "S'està iniciant l'actualització principal...",
"migration_0021_not_buster2": "La distribució actual de Debian no és Buster! Si ja heu executat la migració Buster->Bullseye, aquest error és simptomàtic del fet que el procediment de migració no acabà correctament (en cas contrari, YunoHost l'hauria marcat com a completada). Es recomana investigar què va passar amb l'equip de suport, que necessitarà el registre **complet** de la migració, que es pot trobar a Eines > Registres a Webadmin.",
"migration_0021_not_enough_free_space": "L'espai lliure és bastant baix a /var/! Hauríeu de tenir almenys 1 GB lliure per executar aquesta migració.",
"migration_0021_patch_yunohost_conflicts": "S'està aplicant el pegat per solucionar el problema del conflicte...",
"root_password_changed": "la contrasenya de root s'ha canviat",
"tools_upgrade": "Actualitzant paquets del sistema",
"user_import_success": "Els usuaris s'han importat correctament",
"migration_0021_problematic_apps_warning": "Tingueu en compte que s'han detectat les següents aplicacions instal·lades possiblement problemàtiques. Sembla que no s'han instal·lat des del catàleg d'aplicacions de YunoHost o no estan marcades com a «funcionant». En conseqüència, no es pot garantir que encara funcionin després de l'actualització: {problematic_apps}",
"migration_0024_rebuild_python_venv_disclaimer_rebuild": "S'intentarà reconstruir el virtualenv per a les aplicacions següents (Nota: l'operació pot trigar una mica!): {rebuild_apps}",
"migration_0024_rebuild_python_venv_failed": "No s'ha pogut reconstruir el virtualenv de Python per a {app}. És possible que l'aplicació no funcioni mentre no es resolgui. Hauríeu d'arreglar la situació forçant l'actualització d'aquesta aplicació mitjançant «yunohost app upgrade --force {app}».",
"migration_description_0026_new_admins_group": "Migra al nou sistema d'«administradors múltiples»",
"password_too_long": "Si us plau, trieu una contrasenya de menys de 127 caràcters",
"restore_backup_too_old": "Aquest arxiu de còpia de seguretat no es pot restaurar perquè prové d'una versió de YunoHost massa antiga.",
"service_not_reloading_because_conf_broken": "No s'està tornant a carregar/reiniciar el servei «{name}» perquè la seva configuració està trencada: {errors}",
"tools_upgrade_failed": "No s'han pogut actualitzar els paquets: {packages_list}",
"user_import_bad_file": "El vostre fitxer CSV no té el format correcte, s'ignorarà per evitar possibles pèrdues de dades",
"user_import_bad_line": "Línia {line} incorrecta: {details}",
"user_import_missing_columns": "Falten les columnes següents: {columns}",
"user_import_nothing_to_do": "No cal importar cap usuari",
"user_import_partial_failed": "L'operació d'importació dels usuaris ha fallat parcialment",
"domain_dns_push_record_failed": "No s'ha pogut {action} el registre {type}/{name}: {error}",
"registrar_infos": "Informació del registrador"
} }

View file

@ -35,7 +35,7 @@
"custom_app_url_required": "Sie müssen eine URL angeben, um Ihre benutzerdefinierte App {app} zu aktualisieren", "custom_app_url_required": "Sie müssen eine URL angeben, um Ihre benutzerdefinierte App {app} zu aktualisieren",
"domain_cert_gen_failed": "Zertifikat konnte nicht erzeugt werden", "domain_cert_gen_failed": "Zertifikat konnte nicht erzeugt werden",
"domain_created": "Domäne erstellt", "domain_created": "Domäne erstellt",
"domain_creation_failed": "Konnte Domäne nicht erzeugen", "domain_creation_failed": "Konnte Domäne {domain} nicht erzeugen: {error}",
"domain_deleted": "Domain wurde gelöscht", "domain_deleted": "Domain wurde gelöscht",
"domain_deletion_failed": "Domain {domain}: {error} konnte nicht gelöscht werden", "domain_deletion_failed": "Domain {domain}: {error} konnte nicht gelöscht werden",
"domain_dyndns_already_subscribed": "Du hast dich schon für eine DynDNS-Domäne registriert", "domain_dyndns_already_subscribed": "Du hast dich schon für eine DynDNS-Domäne registriert",
@ -212,7 +212,7 @@
"group_deletion_failed": "Konnte Gruppe '{group}' nicht löschen: {error}", "group_deletion_failed": "Konnte Gruppe '{group}' nicht löschen: {error}",
"dyndns_provider_unreachable": "DynDNS-Anbieter {provider} kann nicht erreicht werden: Entweder ist dein YunoHost nicht korrekt mit dem Internet verbunden oder der Dynette-Server ist ausgefallen.", "dyndns_provider_unreachable": "DynDNS-Anbieter {provider} kann nicht erreicht werden: Entweder ist dein YunoHost nicht korrekt mit dem Internet verbunden oder der Dynette-Server ist ausgefallen.",
"group_created": "Gruppe '{group}' angelegt", "group_created": "Gruppe '{group}' angelegt",
"group_creation_failed": "Konnte Gruppe '{group}' nicht anlegen", "group_creation_failed": "Konnte Gruppe '{group}' nicht anlegen: {error}",
"group_unknown": "Die Gruppe '{group}' ist unbekannt", "group_unknown": "Die Gruppe '{group}' ist unbekannt",
"group_updated": "Gruppe '{group}' erneuert", "group_updated": "Gruppe '{group}' erneuert",
"group_update_failed": "Kann Gruppe '{group}' nicht aktualisieren: {error}", "group_update_failed": "Kann Gruppe '{group}' nicht aktualisieren: {error}",
@ -224,7 +224,7 @@
"log_app_remove": "Entferne die Applikation '{}'", "log_app_remove": "Entferne die Applikation '{}'",
"log_app_install": "Installiere die Applikation '{}'", "log_app_install": "Installiere die Applikation '{}'",
"log_app_upgrade": "Upgrade der Applikation '{}'", "log_app_upgrade": "Upgrade der Applikation '{}'",
"good_practices_about_admin_password": "Die sind nun dabei, ein neues Administratorpasswort zu definieren. Das Passwort sollte mindestens 8 Zeichen lang sein - es ist jedoch empfehlenswert, ein längeres Passwort (z.B. eine Passphrase) und/oder verschiedene Arten von Zeichen (Groß- und Kleinschreibung, Ziffern und Sonderzeichen) zu verwenden.", "good_practices_about_admin_password": "Sie sind nun dabei, ein neues Administratorpasswort zu definieren. Das Passwort sollte mindestens 8 Zeichen lang sein - es ist jedoch empfehlenswert, ein längeres Passwort (z.B. eine Passphrase) und/oder verschiedene Arten von Zeichen (Groß- und Kleinschreibung, Ziffern und Sonderzeichen) zu verwenden.",
"log_corrupted_md_file": "Die mit Protokollen verknüpfte YAML-Metadatendatei ist beschädigt: '{md_file}\nFehler: {error}''", "log_corrupted_md_file": "Die mit Protokollen verknüpfte YAML-Metadatendatei ist beschädigt: '{md_file}\nFehler: {error}''",
"log_help_to_get_failed_log": "Der Vorgang'{desc}' konnte nicht abgeschlossen werden. Bitte teile das vollständige Protokoll dieser Operation mit dem Befehl 'yunohost log share {name}', um Hilfe zu erhalten", "log_help_to_get_failed_log": "Der Vorgang'{desc}' konnte nicht abgeschlossen werden. Bitte teile das vollständige Protokoll dieser Operation mit dem Befehl 'yunohost log share {name}', um Hilfe zu erhalten",
"backup_no_uncompress_archive_dir": "Dieses unkomprimierte Archivverzeichnis gibt es nicht", "backup_no_uncompress_archive_dir": "Dieses unkomprimierte Archivverzeichnis gibt es nicht",
@ -477,7 +477,7 @@
"regenconf_file_copy_failed": "Die neue Konfigurationsdatei '{new}' kann nicht nach '{conf}' kopiert werden", "regenconf_file_copy_failed": "Die neue Konfigurationsdatei '{new}' kann nicht nach '{conf}' kopiert werden",
"regenconf_file_backed_up": "Die Konfigurationsdatei '{conf}' wurde unter '{backup}' gespeichert", "regenconf_file_backed_up": "Die Konfigurationsdatei '{conf}' wurde unter '{backup}' gespeichert",
"permission_require_account": "Berechtigung {permission} ist nur für Personen mit Konto sinnvoll und kann daher nicht für Gäste aktiviert werden.", "permission_require_account": "Berechtigung {permission} ist nur für Personen mit Konto sinnvoll und kann daher nicht für Gäste aktiviert werden.",
"permission_protected": "Die Berechtigung ist geschützt. Du kannst die Besuchergruppe nicht zu dieser Berechtigung hinzufügen oder daraus entfernen.", "permission_protected": "Die Berechtigung {permission} ist geschützt. Du kannst die Besuchergruppe nicht zu dieser Berechtigung hinzufügen oder daraus entfernen.",
"permission_updated": "Berechtigung '{permission}' aktualisiert", "permission_updated": "Berechtigung '{permission}' aktualisiert",
"permission_update_failed": "Die Berechtigung '{permission}' kann nicht aktualisiert werden : {error}", "permission_update_failed": "Die Berechtigung '{permission}' kann nicht aktualisiert werden : {error}",
"permission_not_found": "Berechtigung '{permission}' nicht gefunden", "permission_not_found": "Berechtigung '{permission}' nicht gefunden",
@ -653,7 +653,7 @@
"global_settings_setting_ssh_compatibility_help": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den SSH-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte). Bei Bedarf können Sie in https://infosec.mozilla.org/guidelines/openssh die Informationen nachlesen.", "global_settings_setting_ssh_compatibility_help": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den SSH-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte). Bei Bedarf können Sie in https://infosec.mozilla.org/guidelines/openssh die Informationen nachlesen.",
"global_settings_setting_ssh_password_authentication_help": "Passwort-Authentifizierung für SSH zulassen", "global_settings_setting_ssh_password_authentication_help": "Passwort-Authentifizierung für SSH zulassen",
"global_settings_setting_ssh_port": "SSH-Port", "global_settings_setting_ssh_port": "SSH-Port",
"global_settings_setting_webadmin_allowlist_help": "IP-Adressen, die auf die Verwaltungsseite zugreifen dürfen. Kommasepariert.", "global_settings_setting_webadmin_allowlist_help": "IP-Adressen, die auf die Verwaltungsseite zugreifen dürfen. CIDR Notation ist erlaubt.",
"global_settings_setting_webadmin_allowlist_enabled_help": "Erlaube nur bestimmten IP-Adressen den Zugriff auf die Verwaltungsseite.", "global_settings_setting_webadmin_allowlist_enabled_help": "Erlaube nur bestimmten IP-Adressen den Zugriff auf die Verwaltungsseite.",
"global_settings_setting_smtp_allow_ipv6_help": "Erlaube die Nutzung von IPv6 um Mails zu empfangen und zu versenden", "global_settings_setting_smtp_allow_ipv6_help": "Erlaube die Nutzung von IPv6 um Mails zu empfangen und zu versenden",
"global_settings_setting_smtp_relay_enabled_help": "Zu verwendender SMTP-Relay-Host um E-Mails zu versenden. Er wird anstelle dieser YunoHost-Instanz verwendet. Nützlich, wenn du in einer der folgenden Situationen bist: Dein ISP- oder VPS-Provider hat deinen Port 25 geblockt, eine deinen residentiellen IPs ist auf DUHL gelistet, du kannst keinen Reverse-DNS konfigurieren oder dieser Server ist nicht direkt mit dem Internet verbunden und du möchtest einen anderen verwenden, um E-Mails zu versenden.", "global_settings_setting_smtp_relay_enabled_help": "Zu verwendender SMTP-Relay-Host um E-Mails zu versenden. Er wird anstelle dieser YunoHost-Instanz verwendet. Nützlich, wenn du in einer der folgenden Situationen bist: Dein ISP- oder VPS-Provider hat deinen Port 25 geblockt, eine deinen residentiellen IPs ist auf DUHL gelistet, du kannst keinen Reverse-DNS konfigurieren oder dieser Server ist nicht direkt mit dem Internet verbunden und du möchtest einen anderen verwenden, um E-Mails zu versenden.",
@ -780,5 +780,6 @@
"dyndns_set_recovery_password_denied": "Konnte Wiederherstellungspasswort nicht einstellen: ungültiges Passwort", "dyndns_set_recovery_password_denied": "Konnte Wiederherstellungspasswort nicht einstellen: ungültiges Passwort",
"dyndns_set_recovery_password_unknown_domain": "Konnte Wiederherstellungspasswort nicht einstellen: Domäne nicht registriert", "dyndns_set_recovery_password_unknown_domain": "Konnte Wiederherstellungspasswort nicht einstellen: Domäne nicht registriert",
"dyndns_set_recovery_password_failed": "Konnte Wiederherstellungspasswort nicht einstellen: {error}", "dyndns_set_recovery_password_failed": "Konnte Wiederherstellungspasswort nicht einstellen: {error}",
"dyndns_set_recovery_password_success": "Wiederherstellungspasswort eingestellt!" "dyndns_set_recovery_password_success": "Wiederherstellungspasswort eingestellt!",
"global_settings_setting_ssh_port_help": "Ein Port unter 1024 wird bevorzugt, um Kaperversuche durch Nicht-Administratordienste auf dem Remote-Computer zu verhindern. Sie sollten auch vermeiden, einen bereits verwendeten Port zu verwenden, z. B. 80 oder 443."
} }

View file

@ -26,7 +26,7 @@
"app_change_url_success": "{app} URL is now {domain}{path}", "app_change_url_success": "{app} URL is now {domain}{path}",
"app_config_unable_to_apply": "Failed to apply config panel values.", "app_config_unable_to_apply": "Failed to apply config panel values.",
"app_config_unable_to_read": "Failed to read config panel values.", "app_config_unable_to_read": "Failed to read config panel values.",
"app_corrupt_source": "YunoHost was able to download the asset '{source_id}' ({url}) for {app}, but the asset doesn't match the expected checksum. This could mean that some temporary network failure happened on your server, OR the asset was somehow changed by the upstream maintainer (or a malicious actor?) and YunoHost packagers need to investigate and update the app manifest to reflect this change.\n Expected sha256 checksum: {expected_sha256}\n Downloaded sha256 checksum: {computed_sha256}\n Downloaded file size: {size}", "app_corrupt_source": "YunoHost was able to download the asset '{source_id}' ({url}) for {app}, but the asset doesn't match the expected checksum. This could mean that some temporary network failure happened on your server, OR the asset was somehow changed by the upstream maintainer (or a malicious actor?) and YunoHost packagers need to investigate and perhaps update the app manifest to take this change into account.\n Expected sha256 checksum: {expected_sha256}\n Downloaded sha256 checksum: {computed_sha256}\n Downloaded file size: {size}",
"app_extraction_failed": "Could not extract the installation files", "app_extraction_failed": "Could not extract the installation files",
"app_failed_to_download_asset": "Failed to download asset '{source_id}' ({url}) for {app}: {out}", "app_failed_to_download_asset": "Failed to download asset '{source_id}' ({url}) for {app}: {out}",
"app_failed_to_upgrade_but_continue": "App {failed_app} failed to upgrade, continue to next upgrades as requested. Run 'yunohost log show {operation_logger_name}' to see failure log", "app_failed_to_upgrade_but_continue": "App {failed_app} failed to upgrade, continue to next upgrades as requested. Run 'yunohost log show {operation_logger_name}' to see failure log",
@ -478,7 +478,7 @@
"global_settings_setting_webadmin_allowlist": "Webadmin IP allowlist", "global_settings_setting_webadmin_allowlist": "Webadmin IP allowlist",
"global_settings_setting_webadmin_allowlist_enabled": "Enable Webadmin IP allowlist", "global_settings_setting_webadmin_allowlist_enabled": "Enable Webadmin IP allowlist",
"global_settings_setting_webadmin_allowlist_enabled_help": "Allow only some IPs to access the webadmin.", "global_settings_setting_webadmin_allowlist_enabled_help": "Allow only some IPs to access the webadmin.",
"global_settings_setting_webadmin_allowlist_help": "IP adresses allowed to access the webadmin.", "global_settings_setting_webadmin_allowlist_help": "IP adresses allowed to access the webadmin. CIDR notation is allowed.",
"good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters long—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_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters long—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 long—though it is good practice to use a longer password (i.e. a passphrase) and/or to 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 long—though it is good practice to use a 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 exists", "group_already_exist": "Group {group} already exists",

View file

@ -23,7 +23,7 @@
"ask_password": "Contraseña", "ask_password": "Contraseña",
"backup_app_failed": "No se pudo respaldar «{app}»", "backup_app_failed": "No se pudo respaldar «{app}»",
"backup_archive_app_not_found": "No se pudo encontrar «{app}» en el archivo de respaldo", "backup_archive_app_not_found": "No se pudo encontrar «{app}» en el archivo de respaldo",
"backup_archive_name_exists": "Ya existe un archivo de respaldo con este nombre.", "backup_archive_name_exists": "Ya existe un archivo de respaldo con el nombre '{name}'.",
"backup_archive_name_unknown": "Copia de seguridad local desconocida '{name}'", "backup_archive_name_unknown": "Copia de seguridad local desconocida '{name}'",
"backup_archive_open_failed": "No se pudo abrir el archivo de respaldo", "backup_archive_open_failed": "No se pudo abrir el archivo de respaldo",
"backup_cleaning_failed": "No se pudo limpiar la carpeta de respaldo temporal", "backup_cleaning_failed": "No se pudo limpiar la carpeta de respaldo temporal",
@ -99,7 +99,7 @@
"service_cmd_exec_failed": "No se pudo ejecutar la orden «{command}»", "service_cmd_exec_failed": "No se pudo ejecutar la orden «{command}»",
"service_disable_failed": "No se pudo hacer que el servicio '{service}' no se iniciara en el arranque.\n\nRegistros de servicio recientes: {logs}", "service_disable_failed": "No se pudo hacer que el servicio '{service}' no se iniciara en el arranque.\n\nRegistros de servicio recientes: {logs}",
"service_disabled": "El servicio '{service}' ya no se iniciará cuando se inicie el sistema.", "service_disabled": "El servicio '{service}' ya no se iniciará cuando se inicie el sistema.",
"service_enable_failed": "No se pudo hacer que el servicio '{service}' se inicie automáticamente en el arranque.\n\nRegistros de servicio recientes: {logs s}", "service_enable_failed": "No se pudo hacer que el servicio '{service}' se inicie automáticamente en el arranque.\n\nRegistros de servicio recientes: {logs}",
"service_enabled": "El servicio '{service}' ahora se iniciará automáticamente durante el arranque del sistema.", "service_enabled": "El servicio '{service}' ahora se iniciará automáticamente durante el arranque del sistema.",
"service_remove_failed": "No se pudo eliminar el servicio «{service}»", "service_remove_failed": "No se pudo eliminar el servicio «{service}»",
"service_removed": "Servicio '{service}' eliminado", "service_removed": "Servicio '{service}' eliminado",
@ -412,7 +412,7 @@
"diagnosis_ram_ok": "El sistema aún tiene {available} ({available_percent}%) de RAM de un total de {total}.", "diagnosis_ram_ok": "El sistema aún tiene {available} ({available_percent}%) de RAM de un total de {total}.",
"diagnosis_swap_none": "El sistema no tiene mas espacio de intercambio. Considera agregar por lo menos {recommended} de espacio de intercambio para evitar que el sistema se quede sin memoria.", "diagnosis_swap_none": "El sistema no tiene mas espacio de intercambio. Considera agregar por lo menos {recommended} de espacio de intercambio para evitar que el sistema se quede sin memoria.",
"diagnosis_swap_notsomuch": "Al sistema le queda solamente {total} de espacio de intercambio. Considera agregar al menos {recommended} para evitar que el sistema se quede sin memoria.", "diagnosis_swap_notsomuch": "Al sistema le queda solamente {total} de espacio de intercambio. Considera agregar al menos {recommended} para evitar que el sistema se quede sin memoria.",
"diagnosis_mail_outgoing_port_25_blocked": "El puerto de salida 25 parece estar bloqueado. Intenta desbloquearlo con el panel de configuración de tu proveedor de servicios de Internet (o proveedor de halbergue). Mientras tanto, el servidor no podrá enviar correos electrónicos a otros servidores.", "diagnosis_mail_outgoing_port_25_blocked": "El servidor de correo SMTP no puede enviar correos electrónicos porque el puerto saliente 25 está bloqueado en IPv{ipversion}.",
"diagnosis_regenconf_allgood": "¡Todos los archivos de configuración están en línea con la configuración recomendada!", "diagnosis_regenconf_allgood": "¡Todos los archivos de configuración están en línea con la configuración recomendada!",
"diagnosis_regenconf_manually_modified": "El archivo de configuración <code>{file}</code> parece que ha sido modificado manualmente.", "diagnosis_regenconf_manually_modified": "El archivo de configuración <code>{file}</code> parece que ha sido modificado manualmente.",
"diagnosis_regenconf_manually_modified_details": "¡Esto probablemente esta BIEN si sabes lo que estás haciendo! YunoHost dejará de actualizar este fichero automáticamente... Pero ten en cuenta que las actualizaciones de YunoHost pueden contener importantes cambios que están recomendados. Si quieres puedes comprobar las diferencias mediante <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> o puedes forzar el volver a las opciones recomendadas mediante el comando <cmd>yunohost tools regen-conf {category} --force</cmd>", "diagnosis_regenconf_manually_modified_details": "¡Esto probablemente esta BIEN si sabes lo que estás haciendo! YunoHost dejará de actualizar este fichero automáticamente... Pero ten en cuenta que las actualizaciones de YunoHost pueden contener importantes cambios que están recomendados. Si quieres puedes comprobar las diferencias mediante <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> o puedes forzar el volver a las opciones recomendadas mediante el comando <cmd>yunohost tools regen-conf {category} --force</cmd>",
@ -427,7 +427,7 @@
"diagnosis_ports_needed_by": "La apertura de este puerto es requerida para la funcionalidad {category} (service {service})", "diagnosis_ports_needed_by": "La apertura de este puerto es requerida para la funcionalidad {category} (service {service})",
"diagnosis_ports_ok": "El puerto {port} es accesible desde internet.", "diagnosis_ports_ok": "El puerto {port} es accesible desde internet.",
"diagnosis_ports_unreachable": "El puerto {port} no es accesible desde internet.", "diagnosis_ports_unreachable": "El puerto {port} no es accesible desde internet.",
"diagnosis_ports_could_not_diagnose": "No se puede comprobar si los puertos están accesibles desde el exterior.", "diagnosis_ports_could_not_diagnose": "No se puede comprobar si los puertos están accesibles desde el exterior en IPv{ipversion}.",
"diagnosis_ports_could_not_diagnose_details": "Error: {error}", "diagnosis_ports_could_not_diagnose_details": "Error: {error}",
"diagnosis_description_regenconf": "Configuraciones de sistema", "diagnosis_description_regenconf": "Configuraciones de sistema",
"diagnosis_description_mail": "Correo electrónico", "diagnosis_description_mail": "Correo electrónico",
@ -444,7 +444,7 @@
"diagnosis_http_connection_error": "Error de conexión: Ne se pudo conectar al dominio solicitado.", "diagnosis_http_connection_error": "Error de conexión: Ne se pudo conectar al dominio solicitado.",
"diagnosis_http_timeout": "Tiempo de espera agotado al intentar contactar tu servidor desde el exterior. Parece que no sea alcanzable.<br>1. La causa más común es que el puerto 80 (y el 443) <a href='https://yunohost.org/isp_box_config'>no estén correctamente redirigidos a tu servidor</a>.<br>2. Deberías asegurarte que el servicio nginx está en marcha.<br>3. En situaciones más complejas: asegurate de que ni el cortafuegos ni el proxy inverso estén interfiriendo.", "diagnosis_http_timeout": "Tiempo de espera agotado al intentar contactar tu servidor desde el exterior. Parece que no sea alcanzable.<br>1. La causa más común es que el puerto 80 (y el 443) <a href='https://yunohost.org/isp_box_config'>no estén correctamente redirigidos a tu servidor</a>.<br>2. Deberías asegurarte que el servicio nginx está en marcha.<br>3. En situaciones más complejas: asegurate de que ni el cortafuegos ni el proxy inverso estén interfiriendo.",
"diagnosis_http_ok": "El Dominio {domain} es accesible desde internet a través de HTTP.", "diagnosis_http_ok": "El Dominio {domain} es accesible desde internet a través de HTTP.",
"diagnosis_http_could_not_diagnose": "No se pudo verificar si el dominio es accesible desde internet.", "diagnosis_http_could_not_diagnose": "No se pudo verificar si los dominios son accesibles desde el exterior en IPv{ipversion}.",
"diagnosis_http_could_not_diagnose_details": "Error: {error}", "diagnosis_http_could_not_diagnose_details": "Error: {error}",
"diagnosis_ports_forwarding_tip": "Para solucionar este incidente, lo más seguro deberías configurar la redirección de los puertos en el router como se especifica en <a href='https://yunohost.org/isp_box_config'>https://yunohost.org/isp_box_config</a>", "diagnosis_ports_forwarding_tip": "Para solucionar este incidente, lo más seguro deberías configurar la redirección de los puertos en el router como se especifica en <a href='https://yunohost.org/isp_box_config'>https://yunohost.org/isp_box_config</a>",
"certmanager_warning_subdomain_dns_record": "El subdominio '{subdomain}' no se resuelve en la misma dirección IP que '{domain}'. Algunas funciones no estarán disponibles hasta que solucione esto y regenere el certificado.", "certmanager_warning_subdomain_dns_record": "El subdominio '{subdomain}' no se resuelve en la misma dirección IP que '{domain}'. Algunas funciones no estarán disponibles hasta que solucione esto y regenere el certificado.",
@ -653,7 +653,7 @@
"global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidad y seguridad para el servidor SSH. Afecta al cifrado (y otros aspectos relacionados con la seguridad). Visite https://infosec.mozilla.org/guidelines/openssh (inglés) para más información.", "global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidad y seguridad para el servidor SSH. Afecta al cifrado (y otros aspectos relacionados con la seguridad). Visite https://infosec.mozilla.org/guidelines/openssh (inglés) para más información.",
"global_settings_setting_ssh_password_authentication_help": "Permitir autenticación de contraseña para SSH", "global_settings_setting_ssh_password_authentication_help": "Permitir autenticación de contraseña para SSH",
"global_settings_setting_ssh_port": "Puerto SSH", "global_settings_setting_ssh_port": "Puerto SSH",
"global_settings_setting_webadmin_allowlist_help": "Direcciones IP permitidas para acceder al webadmin. Separado por comas.", "global_settings_setting_webadmin_allowlist_help": "Direcciones IP permitidas para acceder al webadmin. Se permite notación CIDR.",
"global_settings_setting_webadmin_allowlist_enabled_help": "Permita que solo algunas IP accedan al administrador web.", "global_settings_setting_webadmin_allowlist_enabled_help": "Permita que solo algunas IP accedan al administrador web.",
"global_settings_setting_smtp_allow_ipv6_help": "Permitir el uso de IPv6 para enviar y recibir correo", "global_settings_setting_smtp_allow_ipv6_help": "Permitir el uso de IPv6 para enviar y recibir correo",
"global_settings_setting_smtp_relay_enabled_help": "El servidor relay de SMTP para enviar correo en lugar de esta instalación YunoHost. Útil si estás en una de estas situaciones: tu puerto 25 esta bloqueado por tu ISP o VPS, si estás en usado una IP marcada como residencial o DUHL, si no puedes configurar un DNS inverso o si el servidor no está directamente expuesto a internet y quieres utilizar otro servidor para enviar correos.", "global_settings_setting_smtp_relay_enabled_help": "El servidor relay de SMTP para enviar correo en lugar de esta instalación YunoHost. Útil si estás en una de estas situaciones: tu puerto 25 esta bloqueado por tu ISP o VPS, si estás en usado una IP marcada como residencial o DUHL, si no puedes configurar un DNS inverso o si el servidor no está directamente expuesto a internet y quieres utilizar otro servidor para enviar correos.",
@ -699,7 +699,7 @@
"global_settings_setting_security_experimental_enabled": "Funciones de seguridad experimentales", "global_settings_setting_security_experimental_enabled": "Funciones de seguridad experimentales",
"migration_0024_rebuild_python_venv_disclaimer_ignored": "Virtualenvs no puede reconstruirse automáticamente para esas aplicaciones. Necesitas forzar una actualización para ellas, lo que puede hacerse desde la línea de comandos con: `yunohost app upgrade --force APP`: {ignored_apps}", "migration_0024_rebuild_python_venv_disclaimer_ignored": "Virtualenvs no puede reconstruirse automáticamente para esas aplicaciones. Necesitas forzar una actualización para ellas, lo que puede hacerse desde la línea de comandos con: `yunohost app upgrade --force APP`: {ignored_apps}",
"migration_0024_rebuild_python_venv_failed": "Error al reconstruir el virtualenv de Python para {app}. La aplicación puede no funcionar mientras esto no se resuelva. Deberías arreglar la situación forzando la actualización de esta app usando `yunohost app upgrade --force {app}`.", "migration_0024_rebuild_python_venv_failed": "Error al reconstruir el virtualenv de Python para {app}. La aplicación puede no funcionar mientras esto no se resuelva. Deberías arreglar la situación forzando la actualización de esta app usando `yunohost app upgrade --force {app}`.",
"app_arch_not_supported": "Esta aplicación solo se puede instalar en arquitecturas {', '.join(required)} pero la arquitectura de tu servidor es {current}", "app_arch_not_supported": "Esta aplicación solo se puede instalar en arquitecturas {required} pero la arquitectura de tu servidor es {current}",
"app_resource_failed": "Falló la asignación, desasignación o actualización de recursos para {app}: {error}", "app_resource_failed": "Falló la asignación, desasignación o actualización de recursos para {app}: {error}",
"app_not_enough_disk": "Esta aplicación requiere {required} espacio libre.", "app_not_enough_disk": "Esta aplicación requiere {required} espacio libre.",
"app_not_enough_ram": "Esta aplicación requiere {required} de RAM para ser instalada/actualizada, pero solo hay {current} disponible actualmente.", "app_not_enough_ram": "Esta aplicación requiere {required} de RAM para ser instalada/actualizada, pero solo hay {current} disponible actualmente.",
@ -749,14 +749,14 @@
"app_change_url_failed": "No es possible cambiar la URL para {app}: {error}", "app_change_url_failed": "No es possible cambiar la URL para {app}: {error}",
"app_change_url_require_full_domain": "{app} no se puede mover a esta nueva URL porque requiere un dominio completo (es decir, con una ruta = /)", "app_change_url_require_full_domain": "{app} no se puede mover a esta nueva URL porque requiere un dominio completo (es decir, con una ruta = /)",
"app_change_url_script_failed": "Se ha producido un error en el script de modificación de la url", "app_change_url_script_failed": "Se ha producido un error en el script de modificación de la url",
"group_mailalias_add": "El alias de '{mail}' será añadido al del grupo '{ group} '", "group_mailalias_add": "El alias de correo electrónico '{mail}' será añadido al grupo '{group}'",
"group_user_add": "La persona usuaria '{ user} ' será añadida al grupo '{ group} '", "group_user_add": "La persona usuaria '{user}' será añadida al grupo '{group}'",
"dyndns_no_recovery_password": "¡No especificó la password de recuperación! ¡En caso de perder control de este dominio, necesitará contactar con una persona administradora del equipo de YunoHost!", "dyndns_no_recovery_password": "¡No especificó la password de recuperación! ¡En caso de perder control de este dominio, necesitará contactar con una persona administradora del equipo de YunoHost!",
"dyndns_too_many_requests": "El servicio DynDNS de YunoHost recibió demasiadas peticiones de su parte, por favor espere 1 hora antes de intentarlo de nuevo.", "dyndns_too_many_requests": "El servicio DynDNS de YunoHost recibió demasiadas peticiones de su parte, por favor espere 1 hora antes de intentarlo de nuevo.",
"dyndns_set_recovery_password_unknown_domain": "Falló al establecer la password de recuperación: dominio no registrado", "dyndns_set_recovery_password_unknown_domain": "Falló al establecer la password de recuperación: dominio no registrado",
"global_settings_setting_dns_exposure": "Versión IP del DNS establecida en la configuración y diagnósticos", "global_settings_setting_dns_exposure": "Versión IP del DNS establecida en la configuración y diagnósticos",
"group_mailalias_remove": "El alias de '{mail}' será eliminado del grupo '{ group} '", "group_mailalias_remove": "El alias de correo electrónico '{mail}' será eliminado del grupo '{group}'",
"group_user_remove": "La persona usuaria '{ user} ' será eliminada al grupo '{ group} '", "group_user_remove": "La persona usuaria '{user}' será eliminada del grupo '{group}'",
"app_failed_to_upgrade_but_continue": "La aplicación {failed_app} no pudo actualizarse, continúe con las siguientes actualizaciones como solicitado. Ejecuta 'yunohost log show {operation_logger_name}' para visualizar el log de fallos", "app_failed_to_upgrade_but_continue": "La aplicación {failed_app} no pudo actualizarse, continúe con las siguientes actualizaciones como solicitado. Ejecuta 'yunohost log show {operation_logger_name}' para visualizar el log de fallos",
"app_not_upgraded_broken_system": "La aplicacion '{failed_app}' falló en la actualización he hizo que el sistema pasase a un estado de fallo, como consecuencia las siguientes actualizaciones de aplicaciones han sido canceladas: {apps}", "app_not_upgraded_broken_system": "La aplicacion '{failed_app}' falló en la actualización he hizo que el sistema pasase a un estado de fallo, como consecuencia las siguientes actualizaciones de aplicaciones han sido canceladas: {apps}",
"app_not_upgraded_broken_system_continue": "La aplicacion '{failed_app}' falló en la actualización he hizo que el sistema pasase a un estado de fallo (así que --continue-on-failure se ignoró), como consecuencia las siguientes actualizaciones de aplicaciones han sido canceladas: {apps}", "app_not_upgraded_broken_system_continue": "La aplicacion '{failed_app}' falló en la actualización he hizo que el sistema pasase a un estado de fallo (así que --continue-on-failure se ignoró), como consecuencia las siguientes actualizaciones de aplicaciones han sido canceladas: {apps}",
@ -780,5 +780,6 @@
"dyndns_set_recovery_password_invalid_password": "Falló al establecer la password de recuperación: la password no es suficientemente fuerte", "dyndns_set_recovery_password_invalid_password": "Falló al establecer la password de recuperación: la password no es suficientemente fuerte",
"dyndns_set_recovery_password_failed": "Falló al establecer la password de recuperación: {error}", "dyndns_set_recovery_password_failed": "Falló al establecer la password de recuperación: {error}",
"dyndns_set_recovery_password_success": "¡Password de recuperación establecida!", "dyndns_set_recovery_password_success": "¡Password de recuperación establecida!",
"global_settings_setting_dns_exposure_help": "NB: Esto afecta únicamente a la configuración recomentada de DNS y en las pruebas de diagnóstico. No afecta a la configuración del sistema." "global_settings_setting_dns_exposure_help": "NB: Esto afecta únicamente a la configuración recomentada de DNS y en las pruebas de diagnóstico. No afecta a la configuración del sistema.",
"global_settings_setting_ssh_port_help": "Un puerto menor a 1024 es preferible para evitar intentos de usurpación por servicios no administrativos en la máquina remota. También debe de evitar usar un puerto ya en uso, como el 80 o 443."
} }

View file

@ -228,7 +228,7 @@
"app_removed": "{app} desinstalatu da", "app_removed": "{app} desinstalatu da",
"backup_cleaning_failed": "Ezinezkoa izan da behin-behineko babeskopien karpeta hustea", "backup_cleaning_failed": "Ezinezkoa izan da behin-behineko babeskopien karpeta hustea",
"certmanager_attempt_to_replace_valid_cert": "{domain} domeinurako egokia eta baliogarria den ziurtagiri bat ordezkatzen saiatzen ari zara! (Erabili --force mezu hau deuseztatu eta ziurtagiria ordezkatzeko)", "certmanager_attempt_to_replace_valid_cert": "{domain} domeinurako egokia eta baliogarria den ziurtagiri bat ordezkatzen saiatzen ari zara! (Erabili --force mezu hau deuseztatu eta ziurtagiria ordezkatzeko)",
"diagnosis_backports_in_sources_list": "Dirudienez apt (pakete kudeatzailea) backports biltegia erabiltzeko konfiguratuta dago. Zertan ari zaren ez badakizu, ez zenuke backports biltegietako aplikaziorik instalatu beharko, ezegonkortasun eta gatazkak eragin ditzaketelako sistemarekin.", "diagnosis_backports_in_sources_list": "Dirudienez apt (pakete kudeatzailea) backports gordailua erabiltzeko konfiguratuta dago. Zertan ari zaren ez badakizu, ez zenuke backports gurdailuetako aplikaziorik instalatu beharko, ezegonkortasun eta gatazkak eragin ditzaketelako sistemarekin.",
"app_restore_failed": "Ezinezkoa izan da {app} lehengoratzea: {error}", "app_restore_failed": "Ezinezkoa izan da {app} lehengoratzea: {error}",
"diagnosis_apps_allgood": "Instalatutako aplikazioak bat datoz oinarrizko pakete-jarraibideekin", "diagnosis_apps_allgood": "Instalatutako aplikazioak bat datoz oinarrizko pakete-jarraibideekin",
"diagnosis_apps_bad_quality": "Aplikazio hau hondatuta dagoela dio YunoHosten aplikazioen katalogoak. Agian behin-behineko kontua da arduradunak arazoa konpondu bitartean. Oraingoz, ezin da aplikazioa eguneratu.", "diagnosis_apps_bad_quality": "Aplikazio hau hondatuta dagoela dio YunoHosten aplikazioen katalogoak. Agian behin-behineko kontua da arduradunak arazoa konpondu bitartean. Oraingoz, ezin da aplikazioa eguneratu.",
@ -394,7 +394,7 @@
"hook_exec_not_terminated": "Aginduak ez du behar bezala amaitu: {path}", "hook_exec_not_terminated": "Aginduak ez du behar bezala amaitu: {path}",
"log_corrupted_md_file": "Erregistroei lotutako YAML metadatu fitxategia kaltetuta dago: '{md_file}\nErrorea: {error}'", "log_corrupted_md_file": "Erregistroei lotutako YAML metadatu fitxategia kaltetuta dago: '{md_file}\nErrorea: {error}'",
"log_letsencrypt_cert_renew": "Berriztu '{}' Let's Encrypt ziurtagiria", "log_letsencrypt_cert_renew": "Berriztu '{}' Let's Encrypt ziurtagiria",
"diagnosis_package_installed_from_sury_details": "Sury izena duen kanpoko biltegi batetik instalatu dira pakete batzuk, nahi gabe. YunoHosten taldeak hobekuntzak egin ditu pakete hauek kudeatzeko, baina litekeena da PHP7.3 aplikazioak Stretch sistema eragilean instalatu zituzten kasu batzuetan arazoak sortzea. Egoera hau konpontzeko, honako komando hau exekutatu beharko zenuke: <cmd>{cmd_to_fix}</cmd>", "diagnosis_package_installed_from_sury_details": "Sury izena duen kanpoko gordailu batetik instalatu dira pakete batzuk, nahi gabe. YunoHosten taldeak hobekuntzak egin ditu pakete hauek kudeatzeko, baina litekeena da PHP7.3 aplikazioak Stretch sistema eragilean instalatu zituzten kasu batzuetan arazoak sortzea. Egoera hau konpontzeko, honako komando hau exekutatu beharko zenuke: <cmd>{cmd_to_fix}</cmd>",
"log_help_to_get_log": "'{desc}' eragiketaren erregistroa ikusteko, exekutatu 'yunohost log show {name}'", "log_help_to_get_log": "'{desc}' eragiketaren erregistroa ikusteko, exekutatu 'yunohost log show {name}'",
"dpkg_is_broken": "Une honetan ezinezkoa da sistemaren dpkg/APT pakateen kudeatzaileek hondatutako itxura dutelako… Arazoa konpontzeko SSH bidez konektatzen saia zaitezke eta ondoren exekutatu 'sudo apt install --fix-broken' edota 'sudo dpkg --configure -a' edota 'sudo dpkg --audit'.", "dpkg_is_broken": "Une honetan ezinezkoa da sistemaren dpkg/APT pakateen kudeatzaileek hondatutako itxura dutelako… Arazoa konpontzeko SSH bidez konektatzen saia zaitezke eta ondoren exekutatu 'sudo apt install --fix-broken' edota 'sudo dpkg --configure -a' edota 'sudo dpkg --audit'.",
"domain_cannot_remove_main": "Ezin duzu '{domain}' ezabatu domeinu nagusia delako. Beste domeinu bat ezarri beharko duzu nagusi bezala 'yunohost domain main-domain -n <another-domain>' erabiliz; honako hauek dituzu aukeran: {other_domains}", "domain_cannot_remove_main": "Ezin duzu '{domain}' ezabatu domeinu nagusia delako. Beste domeinu bat ezarri beharko duzu nagusi bezala 'yunohost domain main-domain -n <another-domain>' erabiliz; honako hauek dituzu aukeran: {other_domains}",
@ -653,7 +653,7 @@
"global_settings_setting_ssh_compatibility_help": "Bateragarritasun eta segurtasun arteko gatazka SSH zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", "global_settings_setting_ssh_compatibility_help": "Bateragarritasun eta segurtasun arteko gatazka SSH zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)",
"global_settings_setting_ssh_password_authentication_help": "Baimendu pasahitz bidezko autentikazioa SSHrako", "global_settings_setting_ssh_password_authentication_help": "Baimendu pasahitz bidezko autentikazioa SSHrako",
"global_settings_setting_ssh_port": "SSH ataka", "global_settings_setting_ssh_port": "SSH ataka",
"global_settings_setting_webadmin_allowlist_help": "Administrazio-ataria bisita dezaketen IP helbideak, koma bidez bereiziak.", "global_settings_setting_webadmin_allowlist_help": "Administrazio-atarira sar daitezken IP helbideak. CIDR notazioa ahalbidetzen da.",
"global_settings_setting_webadmin_allowlist_enabled_help": "Baimendu IP zehatz batzuk bakarrik administrazio-atarian.", "global_settings_setting_webadmin_allowlist_enabled_help": "Baimendu IP zehatz batzuk bakarrik administrazio-atarian.",
"global_settings_setting_smtp_allow_ipv6_help": "Baimendu IPv6 posta elektronikoa jaso eta bidaltzeko", "global_settings_setting_smtp_allow_ipv6_help": "Baimendu IPv6 posta elektronikoa jaso eta bidaltzeko",
"global_settings_setting_smtp_relay_enabled_help": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu.", "global_settings_setting_smtp_relay_enabled_help": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu.",
@ -697,7 +697,7 @@
"diagnosis_using_yunohost_testing_details": "Ez dago arazorik zertan ari zaren baldin badakizu, baina arretaz irakurri oharrak YunoHosten eguneraketak instalatu baino lehen! 'testing' (proba) bertsioak ezgaitu nahi badituzu, kendu <cmd>testing</cmd> gakoa <cmd>/etc/apt/sources.list.d/yunohost.list</cmd> fitxategitik.", "diagnosis_using_yunohost_testing_details": "Ez dago arazorik zertan ari zaren baldin badakizu, baina arretaz irakurri oharrak YunoHosten eguneraketak instalatu baino lehen! 'testing' (proba) bertsioak ezgaitu nahi badituzu, kendu <cmd>testing</cmd> gakoa <cmd>/etc/apt/sources.list.d/yunohost.list</cmd> fitxategitik.",
"global_settings_setting_smtp_allow_ipv6": "Baimendu IPv6", "global_settings_setting_smtp_allow_ipv6": "Baimendu IPv6",
"global_settings_setting_smtp_relay_host": "SMTP errele-ostatatzailea", "global_settings_setting_smtp_relay_host": "SMTP errele-ostatatzailea",
"domain_config_acme_eligible": "ACME egokitasuna", "domain_config_acme_eligible": "ACME hautagarritasuna",
"domain_config_acme_eligible_explain": "Ez dirudi domeinu hau Let's Encrypt ziurtagirirako prest dagoenik. Egiaztatu DNS ezarpenak eta zerbitzariaren HTTP irisgarritasuna. <a href='#/diagnosis'>Diagnostikoen guneko</a> 'DNS erregistroak' eta 'Web' atalek zer dagoen gaizki ulertzen lagun zaitzakete.", "domain_config_acme_eligible_explain": "Ez dirudi domeinu hau Let's Encrypt ziurtagirirako prest dagoenik. Egiaztatu DNS ezarpenak eta zerbitzariaren HTTP irisgarritasuna. <a href='#/diagnosis'>Diagnostikoen guneko</a> 'DNS erregistroak' eta 'Web' atalek zer dagoen gaizki ulertzen lagun zaitzakete.",
"domain_config_cert_install": "Instalatu Let's Encrypt ziurtagiria", "domain_config_cert_install": "Instalatu Let's Encrypt ziurtagiria",
"domain_config_cert_issuer": "Ziurtagiriaren jaulkitzailea", "domain_config_cert_issuer": "Ziurtagiriaren jaulkitzailea",
@ -722,13 +722,13 @@
"global_settings_setting_webadmin_allowlist": "Administrazio-atarira sartzeko baimendutako IPak", "global_settings_setting_webadmin_allowlist": "Administrazio-atarira sartzeko baimendutako IPak",
"global_settings_setting_webadmin_allowlist_enabled": "Gaitu administrazio-ataria sartzeko baimendutako IPak", "global_settings_setting_webadmin_allowlist_enabled": "Gaitu administrazio-ataria sartzeko baimendutako IPak",
"invalid_credentials": "Pasahitz edo erabiltzaile-izen baliogabea", "invalid_credentials": "Pasahitz edo erabiltzaile-izen baliogabea",
"log_resource_snippet": "Baliabide baten eguneraketa / eskuragarritasuna / eskuragarritasun eza", "log_resource_snippet": "Baliabide bat eguneratzen / eskuratzen / eskuragarritasuna uzten",
"log_settings_set": "Aplikatu ezarpenak", "log_settings_set": "Aplikatu ezarpenak",
"migration_description_0025_global_settings_to_configpanel": "Migratu ezarpen globalen nomenklatura zaharra izendegi berri eta modernora", "migration_description_0025_global_settings_to_configpanel": "Migratu ezarpen globalen nomenklatura zaharra izendegi berri eta modernora",
"migration_description_0026_new_admins_group": "Migratu 'administrari bat baino gehiago' sistema berrira", "migration_description_0026_new_admins_group": "Migratu 'administrari bat baino gehiago' sistema berrira",
"password_confirmation_not_the_same": "Pasahitzak ez datoz bat", "password_confirmation_not_the_same": "Pasahitzak ez datoz bat",
"password_too_long": "Aukeratu 127 karaktere baino laburragoa den pasahitz bat", "password_too_long": "Aukeratu 127 karaktere baino laburragoa den pasahitz bat",
"diagnosis_using_stable_codename_details": "Ostatatzaileak zerbait oker ezarri duenean gertatu ohi da hau. Arriskutsua da, Debianen datorren bertsioa 'estable' (egonkorra) bilakatzen denean, <cmd>apt</cmd>-ek sistemaren pakete guztiak bertsio-berritzen saiatuko da, beharrezko migrazio-prozedurarik burutu gabe. Debianen repositorioan apt iturria editatzen konpontzea da gomendioa, <cmd>stable</cmd> gakoa <cmd>bullseye</cmd> gakoarekin ordezkatuz. Ezarpen-fitxategia <cmd>/etc/apt/sources.list</cmd> izan beharko litzateke, edo <cmd>/etc/apt/sources.list.d/</cmd> direktorioko fitxategiren bat.", "diagnosis_using_stable_codename_details": "Ostatatzaileak zerbait oker ezarri duenean gertatu ohi da hau. Arriskutsua da, Debianen datorren bertsioa 'estable' (egonkorra) bilakatzen denean, <cmd>apt</cmd>-k sistemaren pakete guztiak bertsio-berritzen saiatuko da, beharrezko migrazio-prozedurarik burutu gabe. Debianen gordailuan apt iturria editatzen konpontzea da gomendioa, <cmd>stable</cmd> gakoa <cmd>bullseye</cmd> gakoarekin ordezkatuz. Ezarpen-fitxategia <cmd>/etc/apt/sources.list</cmd> izan beharko litzateke, edo <cmd>/etc/apt/sources.list.d/</cmd> direktorioko fitxategiren bat.",
"group_update_aliases": "'{group}' taldearen aliasak eguneratzen", "group_update_aliases": "'{group}' taldearen aliasak eguneratzen",
"group_no_change": "Ez da ezer aldatu behar '{group}' talderako", "group_no_change": "Ez da ezer aldatu behar '{group}' talderako",
"app_not_enough_ram": "Aplikazio honek {required} RAM behar ditu instalatu edo bertsio-berritzeko, baina {current} bakarrik daude erabilgarri une honetan.", "app_not_enough_ram": "Aplikazio honek {required} RAM behar ditu instalatu edo bertsio-berritzeko, baina {current} bakarrik daude erabilgarri une honetan.",
@ -747,12 +747,12 @@
"domain_config_xmpp_help": "Ohart ongi: XMPP ezaugarri batzuk gaitzeko DNS erregistroak eguneratu eta Lets Encrypt ziurtagiria birsortu beharko dira", "domain_config_xmpp_help": "Ohart ongi: XMPP ezaugarri batzuk gaitzeko DNS erregistroak eguneratu eta Lets Encrypt ziurtagiria birsortu beharko dira",
"global_settings_setting_dns_exposure": "DNS ezarpenetan eta diagnostikoan kontuan hartzeko IP bertsioak", "global_settings_setting_dns_exposure": "DNS ezarpenetan eta diagnostikoan kontuan hartzeko IP bertsioak",
"global_settings_setting_dns_exposure_help": "Ohart ongi: honek gomendatutako DNS ezarpenei eta diagnostikoari eragiten die soilik. Ez du eraginik sistemaren ezarpenetan.", "global_settings_setting_dns_exposure_help": "Ohart ongi: honek gomendatutako DNS ezarpenei eta diagnostikoari eragiten die soilik. Ez du eraginik sistemaren ezarpenetan.",
"diagnosis_ip_no_ipv6_tip_important": "IPv6 automatikoki ezarri ohi du sistemak edo hornitzaileak erabilgarri baldin badago. Bestela eskuz ezarri beharko dituzu aukera batzuk ondorengo dokumentazioan azaldu bezala: <a href='https://yunohost.org/#/ipv6'>https://yunohost.org/#/ipv6</a>.", "diagnosis_ip_no_ipv6_tip_important": "IPv6 automatikoki ezarri ohi du sistemak edo hornitzaileak, erabilgarri baldin badago. Bestela eskuz ezarri beharko dituzu aukera batzuk ondorengo dokumentazioan azaldu bezala: <a href='https://yunohost.org/#/ipv6'>https://yunohost.org/#/ipv6</a>.",
"pattern_fullname": "Baliozko izen oso bat izan behar da (gutxienez hiru karaktere)", "pattern_fullname": "Baliozko izen oso bat izan behar da (gutxienez hiru karaktere)",
"app_change_url_failed": "Ezin izan da {app} aplikazioaren URLa aldatu: {error}", "app_change_url_failed": "Ezin izan da {app} aplikazioaren URLa aldatu: {error}",
"app_change_url_require_full_domain": "Ezin da {app} aplikazioa URL berri honetara aldatu domeinu oso bat behar duelako (hots, / bide-izena duena)", "app_change_url_require_full_domain": "Ezin da {app} aplikazioa URL berri honetara aldatu domeinu oso bat behar duelako (hots, / bide-izena duena)",
"app_change_url_script_failed": "Errorea gertatu da URLa aldatzeko aginduaren barnean", "app_change_url_script_failed": "Errorea gertatu da URLa aldatzeko aginduaren barnean",
"app_corrupt_source": "YunoHostek deskargatu du {app} aplikaziorako '{source_id}' ({url}) baliabidea baina ez dator bat espero zen 'checksum'arekin. Agian zerbitzariak interneteko konexioa galdu du tarte batez, EDO baliabidea nolabait moldatua izan da arduradunaren aldetik (edo partehartzaile maltzur batetik?) eta YunoHosten arduradunek egoera aztertu eta aplikazioaren manifestua eguneratu behar dute aldaketa hau kontuan hartzeko.\n Espero zen sha256 checksuma: {expected_sha256}\n Deskargatutakoaren sha256 checksuma: {computed_sha256}\n Deskargatutako fitxategiaren tamaina: {size}", "app_corrupt_source": "YunoHostek deskargatu du {app} aplikaziorako '{source_id}' ({url}) baliabidea baina ez dator bat espero zen 'checksum'arekin. Agian zerbitzariak interneteko konexioa galdu du tarte batez, EDO baliabidea nolabait moldatua izan da arduradunaren aldetik (edo partehartzaile maltzur baten aldetik?) eta YunoHosten arduradunek egoera aztertu eta agian aplikazioaren manifestua eguneratu behar dute aldaketa hau kontuan hartzeko.\n Espero zen sha256 checksuma: {expected_sha256}\n Deskargatutakoaren sha256 checksuma: {computed_sha256}\n Deskargatutako fitxategiaren tamaina: {size}",
"app_failed_to_upgrade_but_continue": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du, jarraitu hurrengo bertsio-berritzeekin, eskatu bezala. Exekutatu 'yunohost log show {operation_logger_name}' errorearen erregistroa ikusteko", "app_failed_to_upgrade_but_continue": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du, jarraitu hurrengo bertsio-berritzeekin, eskatu bezala. Exekutatu 'yunohost log show {operation_logger_name}' errorearen erregistroa ikusteko",
"app_not_upgraded_broken_system": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du eta sistema hondatu du, beraz, ondorengo aplikazioen bertsio-berritzeak ezeztatu dira: {apps}", "app_not_upgraded_broken_system": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du eta sistema hondatu du, beraz, ondorengo aplikazioen bertsio-berritzeak ezeztatu dira: {apps}",
"app_not_upgraded_broken_system_continue": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du eta sistema hondatu du (beraz, --continue-on-failure aukerari muzin egin zaio) eta ondorengo aplikazioen bertsio-berritzeak ezeztatu dira: {apps}", "app_not_upgraded_broken_system_continue": "{failed_app} aplikazioaren bertsio-berritzeak huts egin du eta sistema hondatu du (beraz, --continue-on-failure aukerari muzin egin zaio) eta ondorengo aplikazioen bertsio-berritzeak ezeztatu dira: {apps}",
@ -780,5 +780,6 @@
"dyndns_set_recovery_password_unknown_domain": "Berreskuratze-pasahitza ezartzeak huts egin du: domeinua ez dago erregistratuta", "dyndns_set_recovery_password_unknown_domain": "Berreskuratze-pasahitza ezartzeak huts egin du: domeinua ez dago erregistratuta",
"dyndns_set_recovery_password_invalid_password": "Berreskuratze-pasahitza ezartzeak huts egin du: pasahitza ez da nahikoa sendoa", "dyndns_set_recovery_password_invalid_password": "Berreskuratze-pasahitza ezartzeak huts egin du: pasahitza ez da nahikoa sendoa",
"dyndns_set_recovery_password_failed": "Berreskuratze-pasahitza ezartzeak huts egin du: {error}", "dyndns_set_recovery_password_failed": "Berreskuratze-pasahitza ezartzeak huts egin du: {error}",
"dyndns_set_recovery_password_success": "Berreskuratze-pasahitza ezarri da!" "dyndns_set_recovery_password_success": "Berreskuratze-pasahitza ezarri da!",
"global_settings_setting_ssh_port_help": "1024 baino ataka txikiago bat izan beharko litzateke, zerbitzu ez-administratzaileek urruneko makinan usurpazio-saiorik egin ez dezaten. Lehendik ere erabiltzen ari diren atakak ere ekidin beharko zenituzke, 80 edo 443 kasu."
} }

View file

@ -412,7 +412,7 @@
"diagnosis_regenconf_manually_modified_details": "C'est probablement OK si vous savez ce que vous faites ! YunoHost cessera de mettre à jour ce fichier automatiquement ... Mais attention, les mises à jour de YunoHost pourraient contenir d'importantes modifications recommandées. Si vous le souhaitez, vous pouvez inspecter les différences avec <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> et forcer la réinitialisation à la configuration recommandée avec <cmd>yunohost tools regen-conf {category} --force</cmd>", "diagnosis_regenconf_manually_modified_details": "C'est probablement OK si vous savez ce que vous faites ! YunoHost cessera de mettre à jour ce fichier automatiquement ... Mais attention, les mises à jour de YunoHost pourraient contenir d'importantes modifications recommandées. Si vous le souhaitez, vous pouvez inspecter les différences avec <cmd>yunohost tools regen-conf {category} --dry-run --with-diff</cmd> et forcer la réinitialisation à la configuration recommandée avec <cmd>yunohost tools regen-conf {category} --force</cmd>",
"apps_catalog_init_success": "Système de catalogue d'applications initialisé !", "apps_catalog_init_success": "Système de catalogue d'applications initialisé !",
"apps_catalog_failed_to_download": "Impossible de télécharger le catalogue des applications {apps_catalog} : {error}", "apps_catalog_failed_to_download": "Impossible de télécharger le catalogue des applications {apps_catalog} : {error}",
"diagnosis_mail_outgoing_port_25_blocked": "Le port sortant 25 semble être bloqué. Vous devriez essayer de le débloquer dans le panneau de configuration de votre fournisseur de services Internet (ou hébergeur). En attendant, le serveur ne pourra pas envoyer des emails à d'autres serveurs.", "diagnosis_mail_outgoing_port_25_blocked": "Le serveur SMTP n'est pas capable d'envoyer de email à d'autres serveurs car le port sortant 25 semble être bloqué en IPv{ipversion}.",
"domain_cannot_remove_main_add_new_one": "Vous ne pouvez pas supprimer '{domain}' car il s'agit du domaine principal et de votre seul domaine. Vous devez d'abord ajouter un autre domaine à l'aide de 'yunohost domain add <another-domain.com>', puis définir comme domaine principal à l'aide de 'yunohost domain main-domain -n <nom-d'un-autre-domaine.com>' et vous pouvez ensuite supprimer le domaine '{domain}' à l'aide de 'yunohost domain remove {domain}'.'", "domain_cannot_remove_main_add_new_one": "Vous ne pouvez pas supprimer '{domain}' car il s'agit du domaine principal et de votre seul domaine. Vous devez d'abord ajouter un autre domaine à l'aide de 'yunohost domain add <another-domain.com>', puis définir comme domaine principal à l'aide de 'yunohost domain main-domain -n <nom-d'un-autre-domaine.com>' et vous pouvez ensuite supprimer le domaine '{domain}' à l'aide de 'yunohost domain remove {domain}'.'",
"diagnosis_security_vulnerable_to_meltdown_details": "Pour résoudre ce problème, vous devez mettre à jour votre système et le redémarrer pour charger le nouveau noyau linux (ou contacter votre fournisseur de serveur si cela ne fonctionne pas). Voir https://meltdownattack.com/ pour plus d'informations.", "diagnosis_security_vulnerable_to_meltdown_details": "Pour résoudre ce problème, vous devez mettre à jour votre système et le redémarrer pour charger le nouveau noyau linux (ou contacter votre fournisseur de serveur si cela ne fonctionne pas). Voir https://meltdownattack.com/ pour plus d'informations.",
"diagnosis_description_basesystem": "Système de base", "diagnosis_description_basesystem": "Système de base",
@ -422,7 +422,7 @@
"diagnosis_description_systemresources": "Ressources système", "diagnosis_description_systemresources": "Ressources système",
"diagnosis_description_ports": "Exposition des ports", "diagnosis_description_ports": "Exposition des ports",
"diagnosis_description_regenconf": "Configurations système", "diagnosis_description_regenconf": "Configurations système",
"diagnosis_ports_could_not_diagnose": "Impossible de diagnostiquer si les ports sont accessibles de l'extérieur.", "diagnosis_ports_could_not_diagnose": "Impossible de diagnostiquer si les ports sont accessibles de l'extérieur dans IPv{ipversion}.",
"diagnosis_ports_could_not_diagnose_details": "Erreur : {error}", "diagnosis_ports_could_not_diagnose_details": "Erreur : {error}",
"apps_catalog_updating": "Mise à jour du catalogue d'applications...", "apps_catalog_updating": "Mise à jour du catalogue d'applications...",
"apps_catalog_obsolete_cache": "Le cache du catalogue d'applications est vide ou obsolète.", "apps_catalog_obsolete_cache": "Le cache du catalogue d'applications est vide ou obsolète.",
@ -430,7 +430,7 @@
"diagnosis_description_mail": "Email", "diagnosis_description_mail": "Email",
"diagnosis_ports_unreachable": "Le port {port} n'est pas accessible depuis l'extérieur.", "diagnosis_ports_unreachable": "Le port {port} n'est pas accessible depuis l'extérieur.",
"diagnosis_ports_ok": "Le port {port} est accessible depuis l'extérieur.", "diagnosis_ports_ok": "Le port {port} est accessible depuis l'extérieur.",
"diagnosis_http_could_not_diagnose": "Impossible de diagnostiquer si le domaine est accessible de l'extérieur.", "diagnosis_http_could_not_diagnose": "Impossible de diagnostiquer si les domaines sont accessibles de l'extérieur dans IPv{ipversion}.",
"diagnosis_http_could_not_diagnose_details": "Erreur : {error}", "diagnosis_http_could_not_diagnose_details": "Erreur : {error}",
"diagnosis_http_ok": "Le domaine {domain} est accessible en HTTP depuis l'extérieur.", "diagnosis_http_ok": "Le domaine {domain} est accessible en HTTP depuis l'extérieur.",
"diagnosis_http_unreachable": "Le domaine {domain} est inaccessible en HTTP depuis l'extérieur.", "diagnosis_http_unreachable": "Le domaine {domain} est inaccessible en HTTP depuis l'extérieur.",
@ -547,7 +547,7 @@
"migration_ldap_rollback_success": "Système rétabli dans son état initial.", "migration_ldap_rollback_success": "Système rétabli dans son état initial.",
"permission_cant_add_to_all_users": "L'autorisation {permission} ne peut pas être ajoutée à tous les utilisateurs.", "permission_cant_add_to_all_users": "L'autorisation {permission} ne peut pas être ajoutée à tous les utilisateurs.",
"migration_ldap_migration_failed_trying_to_rollback": "Impossible de migrer... tentative de restauration du système.", "migration_ldap_migration_failed_trying_to_rollback": "Impossible de migrer... tentative de restauration du système.",
"migration_ldap_can_not_backup_before_migration": "La sauvegarde du système n'a pas pu être terminée avant l'échec de la migration. Erreur : {error }", "migration_ldap_can_not_backup_before_migration": "La sauvegarde du système n'a pas pu être terminée avant l'échec de la migration. Erreur : {error}",
"migration_ldap_backup_before_migration": "Création d'une sauvegarde de la base de données LDAP et des paramètres des applications avant la migration proprement dite.", "migration_ldap_backup_before_migration": "Création d'une sauvegarde de la base de données LDAP et des paramètres des applications avant la migration proprement dite.",
"diagnosis_sshd_config_inconsistent_details": "Veuillez exécuter <cmd>yunohost settings set security.ssh.ssh_port -v VOTRE_PORT_SSH</cmd> pour définir le port SSH, et vérifiez <cmd>yunohost tools regen-conf ssh --dry-run --with-diff</cmd> et <cmd>yunohost tools regen-conf ssh --force</cmd> pour réinitialiser votre configuration aux recommandations YunoHost.", "diagnosis_sshd_config_inconsistent_details": "Veuillez exécuter <cmd>yunohost settings set security.ssh.ssh_port -v VOTRE_PORT_SSH</cmd> pour définir le port SSH, et vérifiez <cmd>yunohost tools regen-conf ssh --dry-run --with-diff</cmd> et <cmd>yunohost tools regen-conf ssh --force</cmd> pour réinitialiser votre configuration aux recommandations YunoHost.",
"diagnosis_sshd_config_inconsistent": "Il semble que le port SSH ait été modifié manuellement dans /etc/ssh/sshd_config. Depuis YunoHost 4.2, un nouveau paramètre global 'security.ssh.ssh_port' est disponible pour éviter de modifier manuellement la configuration.", "diagnosis_sshd_config_inconsistent": "Il semble que le port SSH ait été modifié manuellement dans /etc/ssh/sshd_config. Depuis YunoHost 4.2, un nouveau paramètre global 'security.ssh.ssh_port' est disponible pour éviter de modifier manuellement la configuration.",
@ -658,7 +658,7 @@
"global_settings_setting_ssh_compatibility_help": "Compromis 'compatibilité versus sécurité' pour le serveur SSH. Affecte les cryptogrammes utilisés (et d'autres aspects liés à la sécurité).", "global_settings_setting_ssh_compatibility_help": "Compromis 'compatibilité versus sécurité' pour le serveur SSH. Affecte les cryptogrammes utilisés (et d'autres aspects liés à la sécurité).",
"global_settings_setting_ssh_password_authentication_help": "Autoriser l'authentification par mot de passe pour SSH", "global_settings_setting_ssh_password_authentication_help": "Autoriser l'authentification par mot de passe pour SSH",
"global_settings_setting_ssh_port": "Port SSH", "global_settings_setting_ssh_port": "Port SSH",
"global_settings_setting_webadmin_allowlist_help": "Adresses IP autorisées à accéder à la webadmin. Elles doivent être séparées par une virgule.", "global_settings_setting_webadmin_allowlist_help": "Adresses IP autorisées à accéder à la webadmin. La notation CIDR est autorisée.",
"global_settings_setting_webadmin_allowlist_enabled_help": "Autoriser seulement certaines IP à accéder à la webadmin.", "global_settings_setting_webadmin_allowlist_enabled_help": "Autoriser seulement certaines IP à accéder à la webadmin.",
"global_settings_setting_smtp_allow_ipv6_help": "Autoriser l'utilisation d'IPv6 pour recevoir et envoyer du courrier", "global_settings_setting_smtp_allow_ipv6_help": "Autoriser l'utilisation d'IPv6 pour recevoir et envoyer du courrier",
"global_settings_setting_smtp_relay_enabled_help": "Un relais SMTP permet d'envoyer du courrier à la place de cette instance YunoHost. Cela est utile si vous êtes dans l'une de ces situations : le port 25 est bloqué par votre FAI ou par votre fournisseur VPS ; vous avez une IP résidentielle répertoriée sur DUHL ; vous ne pouvez pas configurer le DNS inversé ; ou le serveur n'est pas directement accessible depuis Internet et vous voulez en utiliser un autre pour envoyer des mails.", "global_settings_setting_smtp_relay_enabled_help": "Un relais SMTP permet d'envoyer du courrier à la place de cette instance YunoHost. Cela est utile si vous êtes dans l'une de ces situations : le port 25 est bloqué par votre FAI ou par votre fournisseur VPS ; vous avez une IP résidentielle répertoriée sur DUHL ; vous ne pouvez pas configurer le DNS inversé ; ou le serveur n'est pas directement accessible depuis Internet et vous voulez en utiliser un autre pour envoyer des mails.",
@ -758,21 +758,21 @@
"apps_failed_to_upgrade": "Ces applications n'ont pas pu être mises à jour : {apps}", "apps_failed_to_upgrade": "Ces applications n'ont pas pu être mises à jour : {apps}",
"apps_failed_to_upgrade_line": "\n * {app_id} (pour voir le journal correspondant, faites un 'yunohost log show {operation_logger_name}')", "apps_failed_to_upgrade_line": "\n * {app_id} (pour voir le journal correspondant, faites un 'yunohost log show {operation_logger_name}')",
"app_failed_to_download_asset": "Échec du téléchargement de la ressource '{source_id}' ({url}) pour {app} : {out}", "app_failed_to_download_asset": "Échec du téléchargement de la ressource '{source_id}' ({url}) pour {app} : {out}",
"app_corrupt_source": "YunoHost a pu télécharger la ressource '{source_id}' ({url}) pour {app}, malheureusement celle-ci ne correspond pas à la somme de contrôle attendue. Cela peut signifier qu'une défaillance temporaire du réseau s'est produite sur votre serveur, OU que la ressource a été modifiée par le mainteneur de l'application en amont (ou un acteur malveillant ?) et que les responsables du paquet de cette application pour YunoHost doivent investiguer et mettre à jour le manifeste de l'application pour refléter ce changement.\n Somme de contrôle sha256 attendue : {expected_sha256}\n Somme de contrôle sha256 téléchargée : {computed_sha256}\n Taille du fichier téléchargé : {size}", "app_corrupt_source": "YunoHost a pu télécharger la ressource '{source_id}' ({url}) pour {app}, malheureusement celle-ci ne correspond pas à la somme des contrôles attendue. Cela peut signifier qu'une défaillance temporaire du réseau s'est produite sur votre serveur, OU que la ressource a été modifiée par le mainteneur de l'application en amont (ou un acteur malveillant ?) et que les responsables du paquet de cette application pour YunoHost doivent investiguer et mettre à jour le manifeste de l'application pour indiquer ce changement.\n Somme de contrôle sha256 attendue : {expected_sha256}\n Somme de contrôle sha256 téléchargée : {computed_sha256}\n Taille du fichier téléchargé : {size}",
"group_mailalias_add": "L'alias de courrier électronique '{mail}' sera ajouté au groupe '{group}'", "group_mailalias_add": "L'alias de courrier électronique '{mail}' sera ajouté au groupe '{group}'",
"group_user_add": "L'utilisateur '{user}' sera ajouté au groupe '{group}'", "group_user_add": "L'utilisateur '{user}' sera ajouté au groupe '{group}'",
"group_user_remove": "L'utilisateur '{user}' sera retiré du groupe '{group}'", "group_user_remove": "L'utilisateur '{user}' sera retiré du groupe '{group}'",
"group_mailalias_remove": "L'alias de courrier électronique '{mail}' sera supprimé du groupe '{group}'", "group_mailalias_remove": "L'alias de courrier électronique '{mail}' sera supprimé du groupe '{group}'",
"ask_dyndns_recovery_password_explain": "Veuillez choisir un mot de passe de récupération pour votre domaine DynDNS, au cas où vous devriez le réinitialiser plus tard.", "ask_dyndns_recovery_password_explain": "Veuillez choisir un mot de passe de récupération pour votre domaine DynDNS, au cas où vous devriez le réinitialiser plus tard.",
"ask_dyndns_recovery_password": "Mot de passe de récupération DynDNS", "ask_dyndns_recovery_password": "Mot de passe de récupération pour DynDNS",
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Veuillez saisir le mot de passe de récupération pour ce domaine DynDNS.", "ask_dyndns_recovery_password_explain_during_unsubscribe": "Veuillez saisir le mot de passe de récupération pour ce domaine DynDNS.",
"dyndns_no_recovery_password": "Aucun mot de passe de récupération n'a été spécifié ! Si vous perdez le contrôle de ce domaine, vous devrez contacter un administrateur de l'équipe YunoHost !", "dyndns_no_recovery_password": "Aucun mot de passe de récupération n'a été spécifié ! Si vous perdez le contrôle de ce domaine, vous devrez contacter un administrateur de l'équipe YunoHost !",
"dyndns_subscribed": "Domaine DynDNS souscrit/enregistré", "dyndns_subscribed": "Domaine DynDNS enregistré",
"dyndns_subscribe_failed": "Impossible de souscrire/de s'enregistrer au domaine DynDNS : {error}", "dyndns_subscribe_failed": "Le nom de domaine DynDNS n'a pas pu être enregistré : {error}",
"dyndns_unsubscribe_failed": "Impossible de se désinscrire du domaine DynDNS : {error}", "dyndns_unsubscribe_failed": "Le nom de domaine DynDNS n'a pas pu être résilié : {error}",
"dyndns_unsubscribed": "Désinscription du domaine DynDNS", "dyndns_unsubscribed": "Domaine DynDNS résilié",
"dyndns_unsubscribe_denied": "Échec de la désinscription du domaine : informations d'identification non valides", "dyndns_unsubscribe_denied": "Échec de la résiliation du domaine : informations d'identification non valides",
"dyndns_unsubscribe_already_unsubscribed": "Le domaine est déjà retiré", "dyndns_unsubscribe_already_unsubscribed": "Le domaine a déjà été résilié",
"dyndns_set_recovery_password_denied": "Échec de la mise en place du mot de passe de récupération : mot de passe non valide", "dyndns_set_recovery_password_denied": "Échec de la mise en place du mot de passe de récupération : mot de passe non valide",
"dyndns_set_recovery_password_unknown_domain": "Échec de la définition du mot de passe de récupération : le domaine n'est pas enregistré", "dyndns_set_recovery_password_unknown_domain": "Échec de la définition du mot de passe de récupération : le domaine n'est pas enregistré",
"dyndns_set_recovery_password_invalid_password": "Échec de la mise en place du mot de passe de récupération : le mot de passe n'est pas assez fort/solide", "dyndns_set_recovery_password_invalid_password": "Échec de la mise en place du mot de passe de récupération : le mot de passe n'est pas assez fort/solide",
@ -780,5 +780,6 @@
"dyndns_set_recovery_password_success": "Mot de passe de récupération changé !", "dyndns_set_recovery_password_success": "Mot de passe de récupération changé !",
"log_dyndns_unsubscribe": "Se désabonner d'un sous-domaine YunoHost '{}'", "log_dyndns_unsubscribe": "Se désabonner d'un sous-domaine YunoHost '{}'",
"dyndns_too_many_requests": "Le service dyndns de YunoHost a reçu trop de requêtes/demandes de votre part, attendez environ 1 heure avant de réessayer.", "dyndns_too_many_requests": "Le service dyndns de YunoHost a reçu trop de requêtes/demandes de votre part, attendez environ 1 heure avant de réessayer.",
"ask_dyndns_recovery_password_explain_unavailable": "Ce domaine DynDNS est déjà enregistré. Si vous êtes la personne qui a enregistré ce domaine lors de sa création, vous pouvez entrer le mot de passe de récupération pour récupérer ce domaine." "ask_dyndns_recovery_password_explain_unavailable": "Ce domaine DynDNS est déjà enregistré. Si vous êtes la personne qui a enregistré ce domaine lors de sa création, vous pouvez entrer le mot de passe de récupération pour récupérer ce domaine.",
"global_settings_setting_ssh_port_help": "Il est préférable d'utiliser un port inférieur à 1024 pour éviter les tentatives d'usurpation par des services non administrateurs sur la machine distante. Vous devez également éviter d'utiliser un port déjà utilisé tel que le 80 ou le 443."
} }

View file

@ -502,7 +502,7 @@
"restore_running_app_script": "Restablecendo a app '{app}'...", "restore_running_app_script": "Restablecendo a app '{app}'...",
"restore_removing_tmp_dir_failed": "Non se puido eliminar o directorio temporal antigo", "restore_removing_tmp_dir_failed": "Non se puido eliminar o directorio temporal antigo",
"restore_nothings_done": "Nada foi restablecido", "restore_nothings_done": "Nada foi restablecido",
"restore_not_enough_disk_space": "Non hai espazo abondo (espazo: {free_space.d} B, espazo necesario: {needed_space} B, marxe de seguridade: {margin} B)", "restore_not_enough_disk_space": "Non hai espazo abondo (espazo: {free_space} B, espazo necesario: {needed_space} B, marxe de seguridade: {margin} B)",
"restore_may_be_not_enough_disk_space": "O teu sistema semella que non ten espazo abondo (libre: {free_space} B, espazo necesario: {needed_space} B, marxe de seguridade {margin} B)", "restore_may_be_not_enough_disk_space": "O teu sistema semella que non ten espazo abondo (libre: {free_space} B, espazo necesario: {needed_space} B, marxe de seguridade {margin} B)",
"restore_hook_unavailable": "O script de restablecemento para '{part}' non está dispoñible no teu sistema nin no arquivo", "restore_hook_unavailable": "O script de restablecemento para '{part}' non está dispoñible no teu sistema nin no arquivo",
"ldap_server_is_down_restart_it": "O servidor LDAP está caído, intenta reinicialo...", "ldap_server_is_down_restart_it": "O servidor LDAP está caído, intenta reinicialo...",
@ -653,7 +653,7 @@
"global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidade e seguridade para o servidor SSH. Aféctalle ao cifrado (e outros aspectos da seguridade). Le https://infosec.mozilla.org/guidelines/openssh for more info.", "global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidade e seguridade para o servidor SSH. Aféctalle ao cifrado (e outros aspectos da seguridade). Le https://infosec.mozilla.org/guidelines/openssh for more info.",
"global_settings_setting_ssh_password_authentication_help": "Permitir autenticación con contrasinal para SSH", "global_settings_setting_ssh_password_authentication_help": "Permitir autenticación con contrasinal para SSH",
"global_settings_setting_ssh_port": "Porto SSH", "global_settings_setting_ssh_port": "Porto SSH",
"global_settings_setting_webadmin_allowlist_help": "Enderezos IP con permiso para acceder á webadmin. Separados por vírgulas.", "global_settings_setting_webadmin_allowlist_help": "Enderezos IP con permiso para acceder á webadmin. Permítese a notación CIDR.",
"global_settings_setting_webadmin_allowlist_enabled_help": "Permitir que só algúns IPs accedan á webadmin.", "global_settings_setting_webadmin_allowlist_enabled_help": "Permitir que só algúns IPs accedan á webadmin.",
"global_settings_setting_smtp_allow_ipv6_help": "Permitir o uso de IPv6 para recibir e enviar emais", "global_settings_setting_smtp_allow_ipv6_help": "Permitir o uso de IPv6 para recibir e enviar emais",
"global_settings_setting_smtp_relay_enabled_help": "Servidor repetidor SMTP para enviar emails no lugar da túa instancia yunohost. É útil se estás nunha destas situacións: o teu porto 25 está bloqueado polo teu provedor ISP u VPN, se tes unha IP residencial nunha lista DUHL, se non podes configurar DNS inversa ou se este servidor non ten conexión directa a internet e queres utilizar outro para enviar os emails.", "global_settings_setting_smtp_relay_enabled_help": "Servidor repetidor SMTP para enviar emails no lugar da túa instancia yunohost. É útil se estás nunha destas situacións: o teu porto 25 está bloqueado polo teu provedor ISP u VPN, se tes unha IP residencial nunha lista DUHL, se non podes configurar DNS inversa ou se este servidor non ten conexión directa a internet e queres utilizar outro para enviar os emails.",
@ -758,7 +758,7 @@
"log_resource_snippet": "Aprovisionamento/desaprovisionamento/actualización dun recurso", "log_resource_snippet": "Aprovisionamento/desaprovisionamento/actualización dun recurso",
"app_resource_failed": "Fallou o aprovisionamento, desaprovisionamento ou actualización de recursos para {app}: {error}", "app_resource_failed": "Fallou o aprovisionamento, desaprovisionamento ou actualización de recursos para {app}: {error}",
"app_failed_to_download_asset": "Fallou a descarga do recurso '{source_id}' ({url}) para {app}: {out}", "app_failed_to_download_asset": "Fallou a descarga do recurso '{source_id}' ({url}) para {app}: {out}",
"app_corrupt_source": "YunoHost foi quen de descargar o recurso '{source_id}' ({url}) para {app}, pero a suma de comprobación para o recurso non concorda. Pode significar que houbo un fallo temporal na conexión do servidor á rede, OU que o recurso sufreu, dalgún xeito, cambios desde que os desenvolvedores orixinais (ou unha terceira parte maliciosa?), o equipo de YunoHost ten que investigar e actualizar o manifesto da app para mostrar este cambio.\n Suma sha256 agardada: {expected_sha256} \n Suma sha256 do descargado: {computed_sha256}\n Tamaño do ficheiro: {size}", "app_corrupt_source": "YunoHost foi quen de descargar o recurso '{source_id}' ({url}) para {app}, pero a suma de comprobación para o recurso non concorda. Pode significar que houbo un fallo temporal na conexión do servidor á rede, OU que o recurso sufreu, dalgún xeito, cambios desde que os desenvolvedores orixinais (ou unha terceira parte maliciosa?), o equipo de YunoHost ten que investigar e podería ter que actualizar o manifesto da app para ter este cambio en conta.\n Suma sha256 agardada: {expected_sha256} \n Suma sha256 do descargado: {computed_sha256}\n Tamaño do ficheiro: {size}",
"group_mailalias_add": "Vaise engadir o alias de correo '{mail}' ao grupo '{group}'", "group_mailalias_add": "Vaise engadir o alias de correo '{mail}' ao grupo '{group}'",
"group_mailalias_remove": "Vaise quitar o alias de email '{mail}' do grupo '{group}'", "group_mailalias_remove": "Vaise quitar o alias de email '{mail}' do grupo '{group}'",
"group_user_add": "Vaise engadir a '{user}' ao grupo '{group}'", "group_user_add": "Vaise engadir a '{user}' ao grupo '{group}'",
@ -780,5 +780,6 @@
"dyndns_set_recovery_password_success": "Estableceuse o contrasinal de recuperación!", "dyndns_set_recovery_password_success": "Estableceuse o contrasinal de recuperación!",
"log_dyndns_unsubscribe": "Retirar subscrición para o subdominio YunoHost '{}'", "log_dyndns_unsubscribe": "Retirar subscrición para o subdominio YunoHost '{}'",
"ask_dyndns_recovery_password_explain_unavailable": "Este dominio DynDNS xa está rexistrado. Se es a persoa que o rexistrou orixinalmente, podes escribir o código de recuperación para reclamar o dominio.", "ask_dyndns_recovery_password_explain_unavailable": "Este dominio DynDNS xa está rexistrado. Se es a persoa que o rexistrou orixinalmente, podes escribir o código de recuperación para reclamar o dominio.",
"dyndns_too_many_requests": "O servicio dyndns de YunoHost recibeu demasiadas peticións do teu sistema, agarda 1 hora e volve intentalo." "dyndns_too_many_requests": "O servicio dyndns de YunoHost recibeu demasiadas peticións do teu sistema, agarda 1 hora e volve intentalo.",
"global_settings_setting_ssh_port_help": "É recomendable un porto inferior a 1024 para evitar os intentos de apropiación por parte de servizos de non-administración na máquina remota. Tamén deberías evitar elexir un porto que xa está sendo utilizado, como 80 ou 443."
} }

View file

@ -4,8 +4,8 @@
"app_not_installed": "Impossibile trovare l'applicazione {app} nell'elenco delle applicazioni installate: {all_apps}", "app_not_installed": "Impossibile trovare l'applicazione {app} nell'elenco delle applicazioni installate: {all_apps}",
"app_unknown": "Applicazione sconosciuta", "app_unknown": "Applicazione sconosciuta",
"ask_password": "Password", "ask_password": "Password",
"backup_archive_name_exists": "Il nome dell'archivio del backup è già esistente.", "backup_archive_name_exists": "Esiste già un archivio di backup con il nome {name}.",
"backup_created": "Backup completo", "backup_created": "Backup creato: {name}",
"backup_output_directory_not_empty": "Dovresti scegliere una cartella di output vuota", "backup_output_directory_not_empty": "Dovresti scegliere una cartella di output vuota",
"domain_created": "Dominio creato", "domain_created": "Dominio creato",
"domain_exists": "Il dominio esiste già", "domain_exists": "Il dominio esiste già",
@ -28,10 +28,10 @@
"app_not_properly_removed": "{app} non è stata correttamente rimossa", "app_not_properly_removed": "{app} non è stata correttamente rimossa",
"action_invalid": "L'azione '{action}' non è valida", "action_invalid": "L'azione '{action}' non è valida",
"app_removed": "{app} disinstallata", "app_removed": "{app} disinstallata",
"app_sources_fetch_failed": "Impossibile riportare i file sorgenti, l'URL è corretto?", "app_sources_fetch_failed": "Impossibile riportare i file sorgenti, lURL è corretto?",
"app_upgrade_failed": "Impossibile aggiornare {app}: {error}", "app_upgrade_failed": "Impossibile aggiornare {app}: {error}",
"app_upgraded": "{app} aggiornata", "app_upgraded": "{app} aggiornata",
"app_requirements_checking": "Controllo i pacchetti richiesti per {app}...", "app_requirements_checking": "Controllo dei requisiti per {app}…",
"ask_main_domain": "Dominio principale", "ask_main_domain": "Dominio principale",
"ask_new_admin_password": "Nuova password dell'amministrazione", "ask_new_admin_password": "Nuova password dell'amministrazione",
"backup_app_failed": "Non è possibile fare il backup {app}", "backup_app_failed": "Non è possibile fare il backup {app}",
@ -47,7 +47,7 @@
"backup_cleaning_failed": "Non è possibile pulire la directory temporanea di backup", "backup_cleaning_failed": "Non è possibile pulire la directory temporanea di backup",
"backup_creation_failed": "Impossibile creare l'archivio di backup", "backup_creation_failed": "Impossibile creare l'archivio di backup",
"backup_delete_error": "Impossibile cancellare '{path}'", "backup_delete_error": "Impossibile cancellare '{path}'",
"backup_deleted": "Backup cancellato", "backup_deleted": "Backup eliminato: {name}",
"backup_hook_unknown": "Hook di backup '{hook}' sconosciuto", "backup_hook_unknown": "Hook di backup '{hook}' sconosciuto",
"backup_nothings_done": "Niente da salvare", "backup_nothings_done": "Niente da salvare",
"backup_output_directory_forbidden": "Scegli una diversa directory di output. I backup non possono esser creati nelle sotto-cartelle /bin, /boot, /dev, /etc, /lib, /root, /run, /sbin, /sys, /usr, /var o /home/yunohost.backup/archives", "backup_output_directory_forbidden": "Scegli una diversa directory di output. I backup non possono esser creati nelle sotto-cartelle /bin, /boot, /dev, /etc, /lib, /root, /run, /sbin, /sys, /usr, /var o /home/yunohost.backup/archives",
@ -142,7 +142,7 @@
"certmanager_certificate_fetching_or_enabling_failed": "Il tentativo di usare il nuovo certificato per {domain} non funziona...", "certmanager_certificate_fetching_or_enabling_failed": "Il tentativo di usare il nuovo certificato per {domain} non funziona...",
"certmanager_attempt_to_renew_nonLE_cert": "Il certificato per il dominio {domain} non è emesso da Let's Encrypt. Impossibile rinnovarlo automaticamente!", "certmanager_attempt_to_renew_nonLE_cert": "Il certificato per il dominio {domain} non è emesso da Let's Encrypt. Impossibile rinnovarlo automaticamente!",
"certmanager_attempt_to_renew_valid_cert": "Il certificato per il dominio {domain} non è in scadenza! (Puoi usare --force per forzare se sai quel che stai facendo)", "certmanager_attempt_to_renew_valid_cert": "Il certificato per il dominio {domain} non è in scadenza! (Puoi usare --force per forzare se sai quel che stai facendo)",
"certmanager_domain_http_not_working": "Il dominio {domain} non sembra accessibile attraverso HTTP. Verifica nella sezione 'Web' nella diagnosi per maggiori informazioni. (Se sai cosa stai facendo, usa '--no-checks' per disattivare i controlli.)", "certmanager_domain_http_not_working": "Il dominio {domain} non sembra accessibile tramite HTTP. Controlla la sezione Web della diagnosi per maggiori informazioni. (Se sai cosa stai facendo, usa --no-checks per disattivare i controlli.)",
"app_already_installed_cant_change_url": "Questa applicazione è già installata. L'URL non può essere cambiato solo da questa funzione. Controlla se `app changeurl` è disponibile.", "app_already_installed_cant_change_url": "Questa applicazione è già installata. L'URL non può essere cambiato solo da questa funzione. Controlla se `app changeurl` è disponibile.",
"app_already_up_to_date": "{app} è già aggiornata", "app_already_up_to_date": "{app} è già aggiornata",
"app_change_url_identical_domains": "Il vecchio ed il nuovo dominio/percorso_url sono identici ('{domain}{path}'), nessuna operazione necessaria.", "app_change_url_identical_domains": "Il vecchio ed il nuovo dominio/percorso_url sono identici ('{domain}{path}'), nessuna operazione necessaria.",
@ -174,7 +174,7 @@
"backup_unable_to_organize_files": "Impossibile organizzare i file nell'archivio con il metodo veloce", "backup_unable_to_organize_files": "Impossibile organizzare i file nell'archivio con il metodo veloce",
"backup_with_no_backup_script_for_app": "L'app {app} non ha script di backup. Ignorata.", "backup_with_no_backup_script_for_app": "L'app {app} non ha script di backup. Ignorata.",
"backup_with_no_restore_script_for_app": "L'app {app} non ha script di ripristino, non sarai in grado di ripristinarla automaticamente dal backup di questa app.", "backup_with_no_restore_script_for_app": "L'app {app} non ha script di ripristino, non sarai in grado di ripristinarla automaticamente dal backup di questa app.",
"certmanager_acme_not_configured_for_domain": "La challenge ACME non può validare il {domain} perché la relativa configurazione di nginx è mancante... Assicurati che la tua configurazione di nginx sia aggiornata con il comando `yunohost tools regen-conf nginx --dry-run --with-diff`.", "certmanager_acme_not_configured_for_domain": "La prova ACME non può validare {domain} ora, perché manca la relativa configurazione di nginx… Assicurati che la tua configurazione di nginx sia aggiornata con il comando `yunohost tools regen-conf nginx --dry-run --with-diff`.",
"certmanager_cannot_read_cert": "Qualcosa è andato storto nel tentativo di aprire il certificato attuale per il dominio {domain} (file: {file}), motivo: {reason}", "certmanager_cannot_read_cert": "Qualcosa è andato storto nel tentativo di aprire il certificato attuale per il dominio {domain} (file: {file}), motivo: {reason}",
"certmanager_cert_install_success": "Certificato Let's Encrypt per il dominio {domain} installato", "certmanager_cert_install_success": "Certificato Let's Encrypt per il dominio {domain} installato",
"aborting": "Annullamento.", "aborting": "Annullamento.",
@ -199,7 +199,7 @@
"password_too_simple_4": "La password deve essere lunga almeno 12 caratteri e contenere numeri, maiuscole e minuscole", "password_too_simple_4": "La password deve essere lunga almeno 12 caratteri e contenere numeri, maiuscole e minuscole",
"app_action_cannot_be_ran_because_required_services_down": "I seguenti servizi dovrebbero essere in funzione per completare questa azione: {services}. Prova a riavviarli per proseguire (e possibilmente cercare di capire come ma non funzionano più).", "app_action_cannot_be_ran_because_required_services_down": "I seguenti servizi dovrebbero essere in funzione per completare questa azione: {services}. Prova a riavviarli per proseguire (e possibilmente cercare di capire come ma non funzionano più).",
"backup_output_symlink_dir_broken": "La tua cartella d'archivio '{path}' è un link simbolico interrotto. Probabilmente hai dimenticato di montare o montare nuovamente il supporto al quale punta il link.", "backup_output_symlink_dir_broken": "La tua cartella d'archivio '{path}' è un link simbolico interrotto. Probabilmente hai dimenticato di montare o montare nuovamente il supporto al quale punta il link.",
"certmanager_domain_dns_ip_differs_from_public_ip": "I record DNS per il dominio '{domain}' è diverso dall'IP di questo server. Controlla la sezione (basic) 'Record DNS' nella diagnosi per maggiori informazioni. Se hai modificato recentemente il tuo valore A, attendi che si propaghi (esistono online alcuni siti per il controllo della propagazione DNS). (Se sai cosa stai facendo, usa '--no-checks' per disattivare i controlli.)", "certmanager_domain_dns_ip_differs_from_public_ip": "I record DNS per il dominio {domain} sono diversi dallindirizzo IP di questo server. Controlla la sezione Record DNS (base) nella diagnosi per maggiori informazioni. Se hai modificato il tuo record A recentemente, attendi che si propaghi (esistono alcuni siti web per il controllo della propagazione DNS). (Se sai cosa stai facendo, usa --no-checks per disattivare i controlli.)",
"certmanager_hit_rate_limit": "Troppi certificati già rilasciati per questa esatta serie di domini {domain} recentemente. Per favore riprova più tardi. Guarda https://letsencrypt.org/docs/rate-limits/ per maggiori dettagli", "certmanager_hit_rate_limit": "Troppi certificati già rilasciati per questa esatta serie di domini {domain} recentemente. Per favore riprova più tardi. Guarda https://letsencrypt.org/docs/rate-limits/ per maggiori dettagli",
"certmanager_no_cert_file": "Impossibile leggere il file di certificato per il dominio {domain} (file: {file})", "certmanager_no_cert_file": "Impossibile leggere il file di certificato per il dominio {domain} (file: {file})",
"certmanager_self_ca_conf_file_not_found": "File di configurazione non trovato per l'autorità di auto-firma (file: {file})", "certmanager_self_ca_conf_file_not_found": "File di configurazione non trovato per l'autorità di auto-firma (file: {file})",
@ -250,7 +250,7 @@
"mail_unavailable": "Questo indirizzo email è riservato e dovrebbe essere automaticamente assegnato al primo utente", "mail_unavailable": "Questo indirizzo email è riservato e dovrebbe essere automaticamente assegnato al primo utente",
"this_action_broke_dpkg": "Questa azione ha danneggiato dpkg/APT (i gestori di pacchetti del sistema)... Puoi provare a risolvere questo problema connettendoti via SSH ed eseguendo `sudo apt install --fix-broken` e/o `sudo dpkg --configure -a`.", "this_action_broke_dpkg": "Questa azione ha danneggiato dpkg/APT (i gestori di pacchetti del sistema)... Puoi provare a risolvere questo problema connettendoti via SSH ed eseguendo `sudo apt install --fix-broken` e/o `sudo dpkg --configure -a`.",
"app_action_broke_system": "Questa azione sembra avere rotto questi servizi importanti: {services}", "app_action_broke_system": "Questa azione sembra avere rotto questi servizi importanti: {services}",
"app_remove_after_failed_install": "Rimozione dell'applicazione a causa del fallimento dell'installazione...", "app_remove_after_failed_install": "Rimozione dellapplicazione dopo del fallimento della sua installazione…",
"app_install_script_failed": "Si è verificato un errore nello script di installazione dell'applicazione", "app_install_script_failed": "Si è verificato un errore nello script di installazione dell'applicazione",
"app_install_failed": "Impossibile installare {app}:{error}", "app_install_failed": "Impossibile installare {app}:{error}",
"app_full_domain_unavailable": "Spiacente, questa app deve essere installata su un proprio dominio, ma altre applicazioni sono già installate sul dominio '{domain}'. Potresti usare invece un sotto-dominio dedicato per questa app.", "app_full_domain_unavailable": "Spiacente, questa app deve essere installata su un proprio dominio, ma altre applicazioni sono già installate sul dominio '{domain}'. Potresti usare invece un sotto-dominio dedicato per questa app.",
@ -262,9 +262,9 @@
"apps_catalog_obsolete_cache": "La cache del catalogo della applicazioni è vuoto o obsoleto.", "apps_catalog_obsolete_cache": "La cache del catalogo della applicazioni è vuoto o obsoleto.",
"apps_catalog_update_success": "Il catalogo delle applicazioni è stato aggiornato!", "apps_catalog_update_success": "Il catalogo delle applicazioni è stato aggiornato!",
"backup_archive_corrupted": "Sembra che l'archivio di backup '{archive}' sia corrotto: {error}", "backup_archive_corrupted": "Sembra che l'archivio di backup '{archive}' sia corrotto: {error}",
"backup_archive_cant_retrieve_info_json": "Impossibile caricare informazione per l'archivio '{archive}'... Impossibile scaricare info.json (oppure non è un json valido).", "backup_archive_cant_retrieve_info_json": "Impossibile caricare informazioni per larchivio {archive}’… Il file info.json non può essere recuperato (oppure non è in formato JSON valido).",
"app_packaging_format_not_supported": "Quest'applicazione non può essere installata perché il formato non è supportato dalla vostra versione di YunoHost. Dovreste considerare di aggiornare il vostro sistema.", "app_packaging_format_not_supported": "Quest'applicazione non può essere installata perché il formato non è supportato dalla vostra versione di YunoHost. Dovreste considerare di aggiornare il vostro sistema.",
"certmanager_domain_not_diagnosed_yet": "Non c'è ancora alcun risultato di diagnosi per il dominio {domain}. Riavvia una diagnosi per la categoria 'DNS records' e 'Web' nella sezione di diagnosi per verificare se il dominio è pronto per Let's Encrypt. (Se sai cosa stai facendo, usa '--no-checks' per disattivare i controlli.)", "certmanager_domain_not_diagnosed_yet": "Non cè ancora alcun risultato di diagnosi per il dominio {domain}. Riavvia una diagnosi per la categoria DNS records e Web nella sezione di diagnosi per verificare se il dominio è pronto per Lets Encrypt. (Se sai cosa stai facendo, usa --no-checks per disattivare i controlli.)",
"backup_permission": "Backup dei permessi per {app}", "backup_permission": "Backup dei permessi per {app}",
"ask_user_domain": "Dominio da usare per l'indirizzo email e l'account XMPP dell'utente", "ask_user_domain": "Dominio da usare per l'indirizzo email e l'account XMPP dell'utente",
"app_manifest_install_ask_is_public": "Quest'applicazione dovrà essere visibile ai visitatori anonimi?", "app_manifest_install_ask_is_public": "Quest'applicazione dovrà essere visibile ai visitatori anonimi?",
@ -272,8 +272,8 @@
"app_manifest_install_ask_password": "Scegli una password di amministrazione per quest'applicazione", "app_manifest_install_ask_password": "Scegli una password di amministrazione per quest'applicazione",
"app_manifest_install_ask_path": "Scegli il percorso URL (dopo il dominio) dove installare quest'applicazione", "app_manifest_install_ask_path": "Scegli il percorso URL (dopo il dominio) dove installare quest'applicazione",
"app_manifest_install_ask_domain": "Scegli il dominio dove installare quest'app", "app_manifest_install_ask_domain": "Scegli il dominio dove installare quest'app",
"app_argument_password_no_default": "Errore durante il parsing dell'argomento '{name}': l'argomento password non può avere un valore di default per ragioni di sicurezza", "app_argument_password_no_default": "Errore registrato processando largomento {name}: largomento password non può avere un valore di default per ragioni di sicurezza",
"additional_urls_already_added": "L'URL aggiuntivo '{url}' è già utilizzato come URL aggiuntivo per il permesso '{permission}'", "additional_urls_already_added": "LURL aggiuntivo {url} è già utilizzato come URL aggiuntivo per il permesso {permission}",
"diagnosis_basesystem_ynh_inconsistent_versions": "Stai eseguendo versioni incompatibili dei pacchetti YunoHost... probabilmente a causa di aggiornamenti falliti o parziali.", "diagnosis_basesystem_ynh_inconsistent_versions": "Stai eseguendo versioni incompatibili dei pacchetti YunoHost... probabilmente a causa di aggiornamenti falliti o parziali.",
"diagnosis_basesystem_ynh_main_version": "Il server sta eseguendo YunoHost {main_version} ({repo})", "diagnosis_basesystem_ynh_main_version": "Il server sta eseguendo YunoHost {main_version} ({repo})",
"diagnosis_basesystem_ynh_single_version": "Versione {package}: {version} ({repo})", "diagnosis_basesystem_ynh_single_version": "Versione {package}: {version} ({repo})",
@ -282,7 +282,7 @@
"diagnosis_basesystem_hardware": "L'architettura hardware del server è {virt} {arch}", "diagnosis_basesystem_hardware": "L'architettura hardware del server è {virt} {arch}",
"certmanager_warning_subdomain_dns_record": "Il sottodominio '{subdomain}' non si risolve nello stesso indirizzo IP di '{domain}'. Alcune funzioni non saranno disponibili finchè questa cosa non verrà sistemata e rigenerato il certificato.", "certmanager_warning_subdomain_dns_record": "Il sottodominio '{subdomain}' non si risolve nello stesso indirizzo IP di '{domain}'. Alcune funzioni non saranno disponibili finchè questa cosa non verrà sistemata e rigenerato il certificato.",
"app_label_deprecated": "Questo comando è deprecato! Utilizza il nuovo comando 'yunohost user permission update' per gestire la label dell'app.", "app_label_deprecated": "Questo comando è deprecato! Utilizza il nuovo comando 'yunohost user permission update' per gestire la label dell'app.",
"additional_urls_already_removed": "L'URL aggiuntivo '{url}' è già stato rimosso come URL aggiuntivo per il permesso '{permission}'", "additional_urls_already_removed": "LURL aggiuntivo {url} è già stato rimosso come URL aggiuntivo per il permesso {permission}",
"diagnosis_services_bad_status_tip": "Puoi provare a <a href='#/services/{service}'>riavviare il servizio</a>, e se non funziona, controlla ai <a href='#/services/{service}'>log del servizio in amministrazione</a> (dalla linea di comando, puoi farlo con <cmd>yunohost service restart {service}</cmd> e <cmd>yunohost service log {service}</cmd>).", "diagnosis_services_bad_status_tip": "Puoi provare a <a href='#/services/{service}'>riavviare il servizio</a>, e se non funziona, controlla ai <a href='#/services/{service}'>log del servizio in amministrazione</a> (dalla linea di comando, puoi farlo con <cmd>yunohost service restart {service}</cmd> e <cmd>yunohost service log {service}</cmd>).",
"diagnosis_services_bad_status": "Il servizio {service} è {status} :(", "diagnosis_services_bad_status": "Il servizio {service} è {status} :(",
"diagnosis_services_conf_broken": "Il servizio {service} è mal-configurato!", "diagnosis_services_conf_broken": "Il servizio {service} è mal-configurato!",
@ -634,5 +634,38 @@
"global_settings_setting_smtp_allow_ipv6_help": "Permetti l'utilizzo di IPv6 per ricevere e inviare mail", "global_settings_setting_smtp_allow_ipv6_help": "Permetti l'utilizzo di IPv6 per ricevere e inviare mail",
"global_settings_setting_smtp_relay_enabled_help": "Utilizza SMTP relay per inviare mail al posto di questa instanza yunohost. Utile se sei in una di queste situazioni: la tua porta 25 è bloccata dal tuo provider ISP o VPS; hai un IP residenziale listato su DUHL; non sei puoi configurare il DNS inverso; oppure questo server non è direttamente esposto a Internet e vuoi usarne un'altro per spedire email.", "global_settings_setting_smtp_relay_enabled_help": "Utilizza SMTP relay per inviare mail al posto di questa instanza yunohost. Utile se sei in una di queste situazioni: la tua porta 25 è bloccata dal tuo provider ISP o VPS; hai un IP residenziale listato su DUHL; non sei puoi configurare il DNS inverso; oppure questo server non è direttamente esposto a Internet e vuoi usarne un'altro per spedire email.",
"domain_config_default_app": "Applicazione di default", "domain_config_default_app": "Applicazione di default",
"app_change_url_failed": "Non è possibile cambiare l'URL per {app}:{error}" "app_change_url_failed": "Non è possibile cambiare l'URL per {app}:{error}",
"ask_dyndns_recovery_password_explain_during_unsubscribe": "Digita la password di recupero per questo dominio DynDNS.",
"ask_fullname": "Nome completo",
"app_not_enough_disk": "Questapp richiede {required} di spazio libero.",
"app_resource_failed": "Fallimento della fornitura, della rimozione o dellaggiornamento di risorse per {app}: {error}",
"apps_failed_to_upgrade_line": "\n * {app_id} (per vedere il log corrispondente, esegui yunohost log show {operation_logger_name})",
"app_change_url_script_failed": "È stato registrato un errore eseguendo lo script per la modifica dellURL",
"certmanager_cert_install_failed": "Linstallazione del certificato Lets Encrypt è fallita per {domains}",
"app_change_url_require_full_domain": "{app} non può essere spostato su questo nuovo URL, poiché richiede un dominio intero (ovvero con percorso /)",
"app_not_upgraded_broken_system_continue": "Laggiornamento dellapp {failed_app} è fallito e ha messo il sistema in uno stato di rottura (dunque, --continue-on-failure è stato ignorato) e di conseguenza gli aggiornamenti delle seguenti app sono stati annullati: {apps}",
"admins": "Amministratori",
"all_users": "Tutti gli utenti di YunoHost",
"app_arch_not_supported": "Questapp può essere installata su architetture {required} ma larchitettura del tuo server è {current}",
"app_manifest_install_ask_init_main_permission": "Chi dovrebbe aver accesso a questapp? (Questa scelta potrà esser cambiata in seguito)",
"app_action_failed": "Lesecuzione dellazione {action} per lapp {app} è fallita",
"app_failed_to_download_asset": "Lo scaricamento della risorsa {source_id} ({url}) per lapp {app} è fallito: {out}",
"ask_dyndns_recovery_password_explain_unavailable": "Questo dominio DynDNS è già registrato. Se sei la persona che lha originariamente registrato, puoi inserire la password di recupero per ripristinare questo dominio.",
"config_action_disabled": "Impossibile eseguire lazione {action} poiché è disattivata, assicurati di rispettare i suoi vincoli. Aiuto: {help}",
"config_action_failed": "Lesecuzione dellazione {action} è fallita: {error}",
"confirm_notifications_read": "ATTENZIONE: Dovresti controllare le notifiche dellapp qui sopra prima di continuare, potrebbero esserci cose importanti da sapere. [{answers}]",
"app_corrupt_source": "YunoHost è riuscito a scaricare la risorsa {source_id} ({url}) per {app}, ma la risorsa non corrisponde al checksum previsto. Questo potrebbe significare che potrebbe essere avvenuto un errore di rete nel tuo server, OPPURE che la risorsa è stata cambiata in qualche modo da chi la mantiene o da una terza parte malevola. Le persone che si occupano del pacchetto YunoHost devono investigare e aggiornare il manifesto dellapp per riflettere questo cambiamento.\n Checksum sha256 previsto: {expected_sha256}\n Checksum sha256 scaricato: {computed_sha256}\n Dimensioni del file scaricato: {size}",
"app_failed_to_upgrade_but_continue": "Laggiornamento dellapp {failed_app} è fallito. Continuando ora con gli aggiornamenti successivi, come richiesto. Esegui yunohost log show {operation_logger_name} per visualizzare il log del fallimento",
"app_manifest_install_ask_init_admin_permission": "Chi dovrebbe aver accesso alle funzionalità di amministrazione per questapp? (Questa scelta potrà esser cambiata in seguito)",
"app_not_enough_ram": "Questapp richiede {required} di RAM per essere installata/aggiornata, ma solo {current} sono disponibili al momento.",
"app_not_upgraded_broken_system": "Laggiornamento dellapp {failed_app} è fallito e ha messo il sistema in uno stato di rottura, di conseguenza i gli aggiornamenti delle seguenti app sono stati annullati: {apps}",
"app_yunohost_version_not_supported": "Questapp richiede YunoHost ≥ {required}, ma la versione installata ora è {current}",
"apps_failed_to_upgrade": "È fallito laggiornamento di queste applicazioni: {apps}",
"ask_admin_fullname": "Nome completo dellutente amministratore",
"ask_dyndns_recovery_password": "Password di recupero per DynDNS",
"certmanager_cert_install_failed_selfsigned": "Linstallazione di un certificato auto-firmato è fallita per {domains}",
"ask_admin_username": "Username dellutente amministratore",
"certmanager_cert_renew_failed": "Il rinnovo del certificato Lets Encrypt è fallito per {domains}",
"ask_dyndns_recovery_password_explain": "Scegli una password di recupero per il tuo dominio DynDNS, in caso dovessi ripristinarlo successivamente.",
"confirm_app_insufficient_ram": "PERICOLO! Questapp richiede {required} di RAM per essere installata/aggiornata, ma solo {current} sono disponibili ora. Nonostante lapp possa funzionare, la sua installazione o aggiornamento richiedono una grande quantità di RAM, perciò il tuo server potrebbe bloccarsi o fallire miseramente. Se sei dispostə a prenderti questo rischio comunque, digita {answers}"
} }

1
locales/ko.json Normal file
View file

@ -0,0 +1 @@
{}

View file

@ -264,5 +264,6 @@
"global_settings_setting_security_experimental_enabled_help": "Povoliť experimentálne bezpečnostné funkcie (nezapínajte túto možnosť, ak neviete, čo môže spôsobiť!)", "global_settings_setting_security_experimental_enabled_help": "Povoliť experimentálne bezpečnostné funkcie (nezapínajte túto možnosť, ak neviete, čo môže spôsobiť!)",
"service_description_rspamd": "Filtruje spam a iné funkcie týkajúce sa e-mailu", "service_description_rspamd": "Filtruje spam a iné funkcie týkajúce sa e-mailu",
"log_letsencrypt_cert_renew": "Obnoviť '{}' certifikát Let's Encrypt", "log_letsencrypt_cert_renew": "Obnoviť '{}' certifikát Let's Encrypt",
"domain_config_cert_summary_selfsigned": "UPOZORNENIE: Aktuálny certifikát je vlastnoručne podpísaný. Prehliadače budú návštevníkom zobrazovať strašidelné varovanie!" "domain_config_cert_summary_selfsigned": "UPOZORNENIE: Aktuálny certifikát je vlastnoručne podpísaný. Prehliadače budú návštevníkom zobrazovať strašidelné varovanie!",
"global_settings_setting_ssowat_panel_overlay_enabled": "Povoliť malú štvorcovú ikonu portálu „YunoHost“ na aplikáciach"
} }

View file

@ -1,9 +1,9 @@
VERSION="?" VERSION="?"
RELEASE="testing" RELEASE="testing"
REPO=$(basename $(git rev-parse --show-toplevel)) REPO=$(basename $(git rev-parse --show-toplevel))
REPO_URL="https://github.com/yunohost/yunohost" REPO_URL=$(git remote get-url origin)
ME=$(git config --global --get user.name) ME=$(git config --get user.name)
EMAIL=$(git config --global --get user.email) EMAIL=$(git config --get user.email)
LAST_RELEASE=$(git tag --list 'debian/11.*' --sort="v:refname" | tail -n 1) LAST_RELEASE=$(git tag --list 'debian/11.*' --sort="v:refname" | tail -n 1)
@ -11,7 +11,8 @@ echo "$REPO ($VERSION) $RELEASE; urgency=low"
echo "" echo ""
git log $LAST_RELEASE.. -n 10000 --first-parent --pretty=tformat:' - %b%s (%h)' \ git log $LAST_RELEASE.. -n 10000 --first-parent --pretty=tformat:' - %b%s (%h)' \
| sed -E "s&Merge .*#([0-9]+).*\$& \([#\1]\($REPO_URL/pull/\1\)\)&g" \ | sed -E "s&Merge .*#([0-9]+).*\$& \([#\1]\(http://github.com/YunoHost/$REPO/pull/\1\)\)&g" \
| sed -E "/Co-authored-by: .* <.*>/d" \
| grep -v "Translations update from Weblate" \ | grep -v "Translations update from Weblate" \
| tac | tac
@ -22,7 +23,7 @@ TRANSLATIONS=$(git log $LAST_RELEASE... -n 10000 --pretty=format:"%s" \
[[ -z "$TRANSLATIONS" ]] || echo " - [i18n] Translations updated for $TRANSLATIONS" [[ -z "$TRANSLATIONS" ]] || echo " - [i18n] Translations updated for $TRANSLATIONS"
echo "" echo ""
CONTRIBUTORS=$(git logc $LAST_RELEASE... -n 10000 --pretty=format:"%an" \ CONTRIBUTORS=$(git log -n10 --pretty=format:'%Cred%h%Creset %C(bold blue)(%an) %Creset%Cgreen(%cr)%Creset - %s %C(yellow)%d%Creset' --abbrev-commit $LAST_RELEASE... -n 10000 --pretty=format:"%an" \
| sort | uniq | grep -v "$ME" | grep -v 'yunohost-bot' | grep -vi 'weblate' \ | sort | uniq | grep -v "$ME" | grep -v 'yunohost-bot' | grep -vi 'weblate' \
| tr '\n' ', ' | sed -e 's/,$//g' -e 's/,/, /g') | tr '\n' ', ' | sed -e 's/,$//g' -e 's/,/, /g')
[[ -z "$CONTRIBUTORS" ]] || echo " Thanks to all contributors <3 ! ($CONTRIBUTORS)" [[ -z "$CONTRIBUTORS" ]] || echo " Thanks to all contributors <3 ! ($CONTRIBUTORS)"

View file

@ -163,7 +163,6 @@ def find_expected_string_keys():
"smtp_relay_password", "smtp_relay_password",
"smtp_relay_port", "smtp_relay_port",
"smtp_relay_user", "smtp_relay_user",
"ssh_port",
"ssowat_panel_overlay_enabled", "ssowat_panel_overlay_enabled",
"root_password", "root_password",
"root_access_explain", "root_access_explain",

View file

@ -975,9 +975,9 @@ def app_manifest(app, with_screenshot=False):
if entry.is_file() and ext in ("png", "jpg", "jpeg", "webp", "gif"): if entry.is_file() and ext in ("png", "jpg", "jpeg", "webp", "gif"):
with open(entry.path, "rb") as img_file: with open(entry.path, "rb") as img_file:
data = base64.b64encode(img_file.read()).decode("utf-8") data = base64.b64encode(img_file.read()).decode("utf-8")
manifest[ manifest["screenshot"] = (
"screenshot" f"data:image/{ext};charset=utf-8;base64,{data}"
] = f"data:image/{ext};charset=utf-8;base64,{data}" )
break break
shutil.rmtree(extracted_app_folder) shutil.rmtree(extracted_app_folder)
@ -1054,6 +1054,7 @@ def app_install(
from yunohost.regenconf import manually_modified_files from yunohost.regenconf import manually_modified_files
from yunohost.utils.legacy import _patch_legacy_helpers from yunohost.utils.legacy import _patch_legacy_helpers
from yunohost.utils.form import ask_questions_and_parse_answers from yunohost.utils.form import ask_questions_and_parse_answers
from yunohost.user import user_list
# Check if disk space available # Check if disk space available
if free_space_in_directory("/") <= 512 * 1000 * 1000: if free_space_in_directory("/") <= 512 * 1000 * 1000:
@ -1077,6 +1078,11 @@ def app_install(
app_id = manifest["id"] app_id = manifest["id"]
if app_id in user_list()["users"].keys():
raise YunohostValidationError(
f"There is already a YunoHost user called {app_id} ...", raw_msg=True
)
# Check requirements # Check requirements
for name, passed, values, err in _check_manifest_requirements( for name, passed, values, err in _check_manifest_requirements(
manifest, action="install" manifest, action="install"
@ -1141,6 +1147,9 @@ def app_install(
# If packaging_format v2+, save all install options as settings # If packaging_format v2+, save all install options as settings
if packaging_format >= 2: if packaging_format >= 2:
for option in options: for option in options:
# Except readonly "questions" that don't even have a value
if option.readonly:
continue
# Except user-provider passwords # Except user-provider passwords
# ... which we need to reinject later in the env_dict # ... which we need to reinject later in the env_dict
if option.type == "password": if option.type == "password":
@ -1889,6 +1898,8 @@ ynh_app_config_run $1
app = self.entity app = self.entity
app_id, app_instance_nb = _parse_app_instance_name(app) app_id, app_instance_nb = _parse_app_instance_name(app)
settings = _get_app_settings(app) settings = _get_app_settings(app)
app_setting_path = os.path.join(APPS_SETTING_PATH, self.entity)
manifest = _get_manifest_of_app(app_setting_path)
env.update( env.update(
{ {
"app_id": app_id, "app_id": app_id,
@ -1897,8 +1908,14 @@ ynh_app_config_run $1
"final_path": settings.get("final_path", ""), "final_path": settings.get("final_path", ""),
"install_dir": settings.get("install_dir", ""), "install_dir": settings.get("install_dir", ""),
"YNH_APP_BASEDIR": os.path.join(APPS_SETTING_PATH, app), "YNH_APP_BASEDIR": os.path.join(APPS_SETTING_PATH, app),
"YNH_APP_PACKAGING_FORMAT": str(manifest["packaging_format"]),
} }
) )
app_script_env = _make_environment_for_app_script(app)
# Note that we only need to update settings wich are not already set
# The settings from config panel should be keep as it is
app_script_env.update(env)
env = app_script_env
ret, values = hook_exec(config_script, args=[action], env=env) ret, values = hook_exec(config_script, args=[action], env=env)
if ret != 0: if ret != 0:

View file

@ -87,7 +87,6 @@ logger = getLogger("yunohost.backup")
class BackupRestoreTargetsManager: class BackupRestoreTargetsManager:
""" """
BackupRestoreTargetsManager manage the targets BackupRestoreTargetsManager manage the targets
in BackupManager and RestoreManager in BackupManager and RestoreManager
@ -210,7 +209,6 @@ class BackupRestoreTargetsManager:
class BackupManager: class BackupManager:
""" """
This class collect files to backup in a list and apply one or several This class collect files to backup in a list and apply one or several
backup method on it. backup method on it.
@ -824,7 +822,6 @@ class BackupManager:
class RestoreManager: class RestoreManager:
""" """
RestoreManager allow to restore a past backup archive RestoreManager allow to restore a past backup archive
@ -1291,9 +1288,11 @@ class RestoreManager:
url=permission_infos["url"], url=permission_infos["url"],
additional_urls=permission_infos["additional_urls"], additional_urls=permission_infos["additional_urls"],
auth_header=permission_infos["auth_header"], auth_header=permission_infos["auth_header"],
label=permission_infos["label"] label=(
if perm_name == "main" permission_infos["label"]
else permission_infos["sublabel"], if perm_name == "main"
else permission_infos["sublabel"]
),
show_tile=permission_infos["show_tile"], show_tile=permission_infos["show_tile"],
protected=permission_infos["protected"], protected=permission_infos["protected"],
sync_perm=False, sync_perm=False,
@ -1425,9 +1424,11 @@ class RestoreManager:
url=permission_infos.get("url"), url=permission_infos.get("url"),
additional_urls=permission_infos.get("additional_urls"), additional_urls=permission_infos.get("additional_urls"),
auth_header=permission_infos.get("auth_header"), auth_header=permission_infos.get("auth_header"),
label=permission_infos.get("label") label=(
if perm_name == "main" permission_infos.get("label")
else permission_infos.get("sublabel"), if perm_name == "main"
else permission_infos.get("sublabel")
),
show_tile=permission_infos.get("show_tile", True), show_tile=permission_infos.get("show_tile", True),
protected=permission_infos.get("protected", False), protected=permission_infos.get("protected", False),
sync_perm=False, sync_perm=False,
@ -1527,7 +1528,6 @@ class RestoreManager:
# Backup methods # # Backup methods #
# #
class BackupMethod: class BackupMethod:
""" """
BackupMethod is an abstract class that represents a way to backup and BackupMethod is an abstract class that represents a way to backup and
restore a list of files. restore a list of files.
@ -1818,7 +1818,6 @@ class BackupMethod:
class CopyBackupMethod(BackupMethod): class CopyBackupMethod(BackupMethod):
""" """
This class just do an uncompress copy of each file in a location, and This class just do an uncompress copy of each file in a location, and
could be the inverse for restoring could be the inverse for restoring
@ -2051,7 +2050,6 @@ class TarBackupMethod(BackupMethod):
class CustomBackupMethod(BackupMethod): class CustomBackupMethod(BackupMethod):
""" """
This class use a bash script/hook "backup_method" to do the This class use a bash script/hook "backup_method" to do the
backup/restore operations. A user can add his own hook inside backup/restore operations. A user can add his own hook inside

View file

@ -578,7 +578,11 @@ def _prepare_certificate_signing_request(domain, key_file, output_folder):
sanlist = [] sanlist = []
# Handle the boring case where the domain is not the root of the dns zone etc... # Handle the boring case where the domain is not the root of the dns zone etc...
from yunohost.dns import _get_relative_name_for_dns_zone, _get_dns_zone_for_domain from yunohost.dns import (
_get_relative_name_for_dns_zone,
_get_dns_zone_for_domain,
)
base_dns_zone = _get_dns_zone_for_domain(domain) base_dns_zone = _get_dns_zone_for_domain(domain)
basename = _get_relative_name_for_dns_zone(domain, base_dns_zone) basename = _get_relative_name_for_dns_zone(domain, base_dns_zone)
suffix = f".{basename}" if basename != "@" else "" suffix = f".{basename}" if basename != "@" else ""

View file

@ -118,9 +118,11 @@ class MyDiagnoser(Diagnoser):
"repo": ynh_packages["yunohost"]["repo"], "repo": ynh_packages["yunohost"]["repo"],
}, },
status="INFO" if consistent_versions else "ERROR", status="INFO" if consistent_versions else "ERROR",
summary="diagnosis_basesystem_ynh_main_version" summary=(
if consistent_versions "diagnosis_basesystem_ynh_main_version"
else "diagnosis_basesystem_ynh_inconsistent_versions", if consistent_versions
else "diagnosis_basesystem_ynh_inconsistent_versions"
),
details=ynh_version_details, details=ynh_version_details,
) )

View file

@ -73,9 +73,11 @@ class MyDiagnoser(Diagnoser):
yield dict( yield dict(
meta={"test": "dnsresolv"}, meta={"test": "dnsresolv"},
status="ERROR", status="ERROR",
summary="diagnosis_ip_broken_dnsresolution" summary=(
if good_resolvconf "diagnosis_ip_broken_dnsresolution"
else "diagnosis_ip_broken_resolvconf", if good_resolvconf
else "diagnosis_ip_broken_resolvconf"
),
) )
return return
# Otherwise, if the resolv conf is bad but we were able to resolve domain name, # Otherwise, if the resolv conf is bad but we were able to resolve domain name,
@ -123,11 +125,9 @@ class MyDiagnoser(Diagnoser):
yield dict( yield dict(
meta={"test": "ipv4"}, meta={"test": "ipv4"},
data={"global": ipv4, "local": get_local_ip("ipv4")}, data={"global": ipv4, "local": get_local_ip("ipv4")},
status="SUCCESS" status=(
if ipv4 "SUCCESS" if ipv4 else "ERROR" if is_ipvx_important(4) else "WARNING"
else "ERROR" ),
if is_ipvx_important(4)
else "WARNING",
summary="diagnosis_ip_connected_ipv4" if ipv4 else "diagnosis_ip_no_ipv4", summary="diagnosis_ip_connected_ipv4" if ipv4 else "diagnosis_ip_no_ipv4",
details=["diagnosis_ip_global", "diagnosis_ip_local"] if ipv4 else None, details=["diagnosis_ip_global", "diagnosis_ip_local"] if ipv4 else None,
) )
@ -135,19 +135,27 @@ class MyDiagnoser(Diagnoser):
yield dict( yield dict(
meta={"test": "ipv6"}, meta={"test": "ipv6"},
data={"global": ipv6, "local": get_local_ip("ipv6")}, data={"global": ipv6, "local": get_local_ip("ipv6")},
status="SUCCESS" status=(
if ipv6 "SUCCESS"
else "ERROR" if ipv6
if settings_get("misc.network.dns_exposure") == "ipv6" else (
else "WARNING", "ERROR"
if settings_get("misc.network.dns_exposure") == "ipv6"
else "WARNING"
)
),
summary="diagnosis_ip_connected_ipv6" if ipv6 else "diagnosis_ip_no_ipv6", summary="diagnosis_ip_connected_ipv6" if ipv6 else "diagnosis_ip_no_ipv6",
details=["diagnosis_ip_global", "diagnosis_ip_local"] details=(
if ipv6 ["diagnosis_ip_global", "diagnosis_ip_local"]
else [ if ipv6
"diagnosis_ip_no_ipv6_tip_important" else [
if is_ipvx_important(6) (
else "diagnosis_ip_no_ipv6_tip" "diagnosis_ip_no_ipv6_tip_important"
], if is_ipvx_important(6)
else "diagnosis_ip_no_ipv6_tip"
)
]
),
) )
# TODO / FIXME : add some attempt to detect ISP (using whois ?) ? # TODO / FIXME : add some attempt to detect ISP (using whois ?) ?

View file

@ -291,9 +291,9 @@ class MyDiagnoser(Diagnoser):
yield dict( yield dict(
meta=meta, meta=meta,
data={}, data={},
status=alert_type.upper() status=(
if alert_type != "not_found" alert_type.upper() if alert_type != "not_found" else "WARNING"
else "WARNING", ),
summary="diagnosis_domain_expiration_" + alert_type, summary="diagnosis_domain_expiration_" + alert_type,
details=details[alert_type], details=details[alert_type],
) )

View file

@ -428,9 +428,11 @@ def domain_remove(
apps_on_that_domain.append( apps_on_that_domain.append(
( (
app, app,
f" - {app} \"{label}\" on https://{domain}{settings['path']}" (
if "path" in settings f" - {app} \"{label}\" on https://{domain}{settings['path']}"
else app, if "path" in settings
else app
),
) )
) )

View file

@ -389,9 +389,11 @@ def hook_exec(
# Define output loggers and call command # Define output loggers and call command
loggers = ( loggers = (
lambda l: logger.debug(l.rstrip() + "\r"), lambda l: logger.debug(l.rstrip() + "\r"),
lambda l: logger.warning(l.rstrip()) lambda l: (
if is_relevant_warning(l.rstrip()) logger.warning(l.rstrip())
else logger.debug(l.rstrip()), if is_relevant_warning(l.rstrip())
else logger.debug(l.rstrip())
),
lambda l: logger.info(l.rstrip()), lambda l: logger.info(l.rstrip()),
) )

View file

@ -457,7 +457,6 @@ class RedactingFormatter(Formatter):
class OperationLogger: class OperationLogger:
""" """
Instances of this class represents unit operation done on the ynh instance. Instances of this class represents unit operation done on the ynh instance.

View file

@ -535,12 +535,16 @@ class MyMigration(Migration):
return "Reading database ..." not in line.rstrip() return "Reading database ..." not in line.rstrip()
callbacks = ( callbacks = (
lambda l: logger.info("+ " + l.rstrip() + "\r") lambda l: (
if _apt_log_line_is_relevant(l) logger.info("+ " + l.rstrip() + "\r")
else logger.debug(l.rstrip() + "\r"), if _apt_log_line_is_relevant(l)
lambda l: logger.warning(l.rstrip()) else logger.debug(l.rstrip() + "\r")
if _apt_log_line_is_relevant(l) ),
else logger.debug(l.rstrip()), lambda l: (
logger.warning(l.rstrip())
if _apt_log_line_is_relevant(l)
else logger.debug(l.rstrip())
),
) )
cmd = ( cmd = (

View file

@ -172,7 +172,7 @@ def _get_user_for_ssh(username, attrs=None):
"username": "root", "username": "root",
"fullname": "", "fullname": "",
"mail": "", "mail": "",
"home_path": root_unix.pw_dir, "homeDirectory": root_unix.pw_dir,
} }
# TODO escape input using https://www.python-ldap.org/doc/html/ldap-filter.html # TODO escape input using https://www.python-ldap.org/doc/html/ldap-filter.html

View file

@ -348,7 +348,7 @@ def test_resource_permissions():
conf = { conf = {
"main": { "main": {
"url": "/", "url": "/",
"allowed": "visitors" "allowed": "visitors",
# TODO: test protected? # TODO: test protected?
}, },
} }

View file

@ -224,9 +224,11 @@ def generate_test_name(intake, output, raw_option, data):
"=".join( "=".join(
[ [
key, key,
str(raw_option[key]) (
if not isinstance(raw_option[key], str) str(raw_option[key])
else f"'{raw_option[key]}'", if not isinstance(raw_option[key], str)
else f"'{raw_option[key]}'"
),
] ]
) )
for key in raw_option.keys() for key in raw_option.keys()
@ -263,9 +265,11 @@ def pytest_generate_tests(metafunc):
[metafunc.cls.raw_option], metafunc.cls.scenarios [metafunc.cls.raw_option], metafunc.cls.scenarios
) )
ids += [ ids += [
generate_test_name(*args.values) (
if isinstance(args, ParameterSet) generate_test_name(*args.values)
else generate_test_name(*args) if isinstance(args, ParameterSet)
else generate_test_name(*args)
)
for args in argvalues for args in argvalues
] ]
elif params[1] == "expected_normalized": elif params[1] == "expected_normalized":

View file

@ -332,9 +332,11 @@ def tools_update(target=None):
# stdout goes to debug # stdout goes to debug
lambda l: logger.debug(l.rstrip()), lambda l: logger.debug(l.rstrip()),
# stderr goes to warning except for the boring apt messages # stderr goes to warning except for the boring apt messages
lambda l: logger.warning(l.rstrip()) lambda l: (
if is_legit_warning(l) logger.warning(l.rstrip())
else logger.debug(l.rstrip()), if is_legit_warning(l)
else logger.debug(l.rstrip())
),
) )
logger.info(m18n.n("updating_apt_cache")) logger.info(m18n.n("updating_apt_cache"))
@ -473,12 +475,16 @@ def tools_upgrade(operation_logger, target=None):
logger.debug("Running apt command :\n{}".format(dist_upgrade)) logger.debug("Running apt command :\n{}".format(dist_upgrade))
callbacks = ( callbacks = (
lambda l: logger.info("+ " + l.rstrip() + "\r") lambda l: (
if _apt_log_line_is_relevant(l) logger.info("+ " + l.rstrip() + "\r")
else logger.debug(l.rstrip() + "\r"), if _apt_log_line_is_relevant(l)
lambda l: logger.warning(l.rstrip()) else logger.debug(l.rstrip() + "\r")
if _apt_log_line_is_relevant(l) ),
else logger.debug(l.rstrip()), lambda l: (
logger.warning(l.rstrip())
if _apt_log_line_is_relevant(l)
else logger.debug(l.rstrip())
),
) )
returncode = call_async_output(dist_upgrade, callbacks, shell=True) returncode = call_async_output(dist_upgrade, callbacks, shell=True)
@ -618,7 +624,11 @@ def tools_basic_space_cleanup():
""" """
subprocess.run("apt autoremove && apt autoclean", shell=True) subprocess.run("apt autoremove && apt autoclean", shell=True)
subprocess.run("journalctl --vacuum-size=50M", shell=True) subprocess.run("journalctl --vacuum-size=50M", shell=True)
subprocess.run("rm /var/log/*.gz && rm /var/log/*/*.gz && rm /var/log/*.? && rm /var/log/*/*.?", shell=True) subprocess.run(
"rm /var/log/*.gz && rm /var/log/*/*.gz && rm /var/log/*.? && rm /var/log/*/*.?",
shell=True,
)
# ############################################ # # ############################################ #
# # # #
@ -954,9 +964,9 @@ class Migration:
# Those are to be implemented by daughter classes # Those are to be implemented by daughter classes
mode = "auto" mode = "auto"
dependencies: List[ dependencies: List[str] = (
str []
] = [] # List of migration ids required before running this migration ) # List of migration ids required before running this migration
@property @property
def disclaimer(self): def disclaimer(self):

View file

@ -268,7 +268,7 @@ class SourcesResource(AppResource):
Various options are available to accomodate the behavior according to the asset structure Various options are available to accomodate the behavior according to the asset structure
##### Example ### Example
```toml ```toml
[resources.sources] [resources.sources]
@ -307,7 +307,7 @@ class SourcesResource(AppResource):
``` ```
##### Properties (for each source) ### Properties (for each source)
- `prefetch` : `true` (default) or `false`, wether or not to pre-fetch this asset during the provisioning phase of the resource. If several arch-dependent url are provided, YunoHost will only prefetch the one for the current system architecture. - `prefetch` : `true` (default) or `false`, wether or not to pre-fetch this asset during the provisioning phase of the resource. If several arch-dependent url are provided, YunoHost will only prefetch the one for the current system architecture.
- `url` : the asset's URL - `url` : the asset's URL
@ -324,27 +324,46 @@ class SourcesResource(AppResource):
- `rename`: some string like `whatever_your_want`, to be used for convenience when `extract` is `false` and the default name of the file is not practical - `rename`: some string like `whatever_your_want`, to be used for convenience when `extract` is `false` and the default name of the file is not practical
- `platform`: for example `linux/amd64` (defaults to `linux/$YNH_ARCH`) to be used in conjonction with `format = "docker"` to specify which architecture to extract for - `platform`: for example `linux/amd64` (defaults to `linux/$YNH_ARCH`) to be used in conjonction with `format = "docker"` to specify which architecture to extract for
###### Regarding `autoupdate` #### Regarding `autoupdate`
Strictly speaking, this has nothing to do with the actual app install. `autoupdate` is expected to contain metadata for automatic maintenance / update of the app sources info in the manifest. It is meant to be a simpler replacement for "autoupdate" Github workflow mechanism. Strictly speaking, this has nothing to do with the actual app install. `autoupdate` is expected to contain metadata for automatic maintenance / update of the app sources info in the manifest. It is meant to be a simpler replacement for "autoupdate" Github workflow mechanism.
The infos are used by this script : https://github.com/YunoHost/apps/blob/master/tools/autoupdate_app_sources/autoupdate_app_sources.py which is ran by the YunoHost infrastructure periodically and will create the corresponding pull request automatically. The infos are used by this script : <https://github.com/YunoHost/apps/blob/master/tools/autoupdate_app_sources/autoupdate_app_sources.py> which is ran by the YunoHost infrastructure periodically and will create the corresponding pull request automatically.
The script will rely on the code repo specified in the upstream section of the manifest. The script will rely on the code repo specified in `code` in the upstream section of the manifest.
`autoupdate.strategy` is expected to be one of : The `autoupdate.strategy` is expected to be constructed like this: `latest_<gitforge>_<strategy>`
- `latest_github_tag` : look for the latest tag (by sorting tags and finding the "largest" version). Then using the corresponding tar.gz url. Tags containing `rc`, `beta`, `alpha`, `start` are ignored, and actually any tag which doesn't look like `x.y.z` or `vx.y.z`
- `latest_github_release` : similar to `latest_github_tags`, but starting from the list of releases and provides the changelog link in PR message. Pre- or draft releases are ignored. Releases may have assets attached to them, in which case you can define:
- `autoupdate.asset = "some regex"` (when there's only one asset to use). The regex is used to find the appropriate asset among the list of all assets
- or several `autoupdate.asset.$arch = "some_regex"` (when the asset is arch-specific). The regex is used to find the appropriate asset for the specific arch among the list of assets
- `latest_github_commit` : will use the latest commit on github, and the corresponding tarball. If this is used for the 'main' source, it will also assume that the version is YYYY.MM.DD corresponding to the date of the commit.
It is also possible to define `autoupdate.upstream` to use a different Git(hub) repository instead of the code repository from the upstream section of the manifest. This can be useful when, for example, the app uses other assets such as plugin from a different repository. You need to replace the `<gitforge>` in the strategy name by either `github`, `gitlab`, `gitea` or `forgejo`, as the autoupdater supports:
##### Provision/Update - GitHub
- GitLab (official and self-hosted instances)
- Gitea & Forgejo instances
And choose one strategy in the following ones:
- `latest_<gitforge>_release` : similar to `latest_<gitforge>_tag`, but starting from the list of releases. Note that it's the only strategy that provides the changelog link in the PR message. Pre- or draft releases are ignored. Releases may have assets attached to them, in which case you can define:
- `autoupdate.asset = "some regex"` (when there's only one asset to use). The regex is used to find the appropriate asset among the list of all assets
- or several `autoupdate.asset.$arch = "some_regex"` (when the asset is arch-specific). The regex is used to find the appropriate asset for the specific arch among the list of assets
- `latest_<gitforge>_tag` : look for the latest tag (by sorting tags and finding the "largest" version). Then using the corresponding tar.gz url. Tags containing `rc`, `beta`, `alpha`, `start` are ignored, and actually any tag which doesn't look like `x.y.z` or `vx.y.z`
- `latest_<gitforge>_commit` : will use the latest commit on github, and the corresponding tarball. If this is used for the 'main' source, it will also assume that the version is YYYY.MM.DD corresponding to the date of the commit.
It is also possible to define `autoupdate.upstream` to use a different Git repository instead of the code repository from the upstream section of the manifest. This can be useful when, for example, the app uses other assets such as plugin from a different repository.
If the upstream project provides non-standard tag or release names, you can fix this, with a regex with a matching group.
For example, if tags look like `release-v4.1`, put:
```toml
autoupdate.version_regex = "^release-v(.*)$"
```
And the autoupdater will use the matched group (here: `4.1`) as the version.
### Provision/Update
- For elements with `prefetch = true`, will download the asset (for the appropriate architecture) and store them in `/var/cache/yunohost/download/$app/$source_id`, to be later picked up by `ynh_setup_source`. (NB: this only happens during install and upgrade, not restore) - For elements with `prefetch = true`, will download the asset (for the appropriate architecture) and store them in `/var/cache/yunohost/download/$app/$source_id`, to be later picked up by `ynh_setup_source`. (NB: this only happens during install and upgrade, not restore)
##### Deprovision ### Deprovision
- Nothing (just cleanup the cache) - Nothing (just cleanup the cache)
""" """
@ -463,7 +482,7 @@ class PermissionsResource(AppResource):
The list of allowed user/groups may be initialized using the content of the `init_{perm}_permission` question from the manifest, hence `init_main_permission` replaces the `is_public` question and shall contain a group name (typically, `all_users` or `visitors`). The list of allowed user/groups may be initialized using the content of the `init_{perm}_permission` question from the manifest, hence `init_main_permission` replaces the `is_public` question and shall contain a group name (typically, `all_users` or `visitors`).
##### Example ### Example
```toml ```toml
[resources.permissions] [resources.permissions]
main.url = "/" main.url = "/"
@ -474,7 +493,7 @@ class PermissionsResource(AppResource):
admin.allowed = "admins" # Assuming the "admins" group exists (cf future developments ;)) admin.allowed = "admins" # Assuming the "admins" group exists (cf future developments ;))
``` ```
##### Properties (for each perm name) ### Properties (for each perm name)
- `url`: The relative URI corresponding to this permission. Typically `/` or `/something`. This property may be omitted for non-web permissions. - `url`: The relative URI corresponding to this permission. Typically `/` or `/something`. This property may be omitted for non-web permissions.
- `show_tile`: (default: `true` if `url` is defined) Wether or not a tile should be displayed for that permission in the user portal - `show_tile`: (default: `true` if `url` is defined) Wether or not a tile should be displayed for that permission in the user portal
- `allowed`: (default: nobody) The group initially allowed to access this perm, if `init_{perm}_permission` is not defined in the manifest questions. Note that the admin may tweak who is allowed/unallowed on that permission later on, this is only meant to **initialize** the permission. - `allowed`: (default: nobody) The group initially allowed to access this perm, if `init_{perm}_permission` is not defined in the manifest questions. Note that the admin may tweak who is allowed/unallowed on that permission later on, this is only meant to **initialize** the permission.
@ -482,14 +501,14 @@ class PermissionsResource(AppResource):
- `protected`: (default: `false`) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. Defaults to 'false'. - `protected`: (default: `false`) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. Defaults to 'false'.
- `additional_urls`: (default: none) List of additional URL for which access will be allowed/forbidden - `additional_urls`: (default: none) List of additional URL for which access will be allowed/forbidden
##### Provision/Update ### Provision/Update
- Delete any permissions that may exist and be related to this app yet is not declared anymore - Delete any permissions that may exist and be related to this app yet is not declared anymore
- Loop over the declared permissions and create them if needed or update them with the new values - Loop over the declared permissions and create them if needed or update them with the new values
##### Deprovision ### Deprovision
- Delete all permission related to this app - Delete all permission related to this app
##### Legacy management ### Legacy management
- Legacy `is_public` setting will be deleted if it exists - Legacy `is_public` setting will be deleted if it exists
""" """
@ -671,23 +690,23 @@ class SystemuserAppResource(AppResource):
""" """
Provision a system user to be used by the app. The username is exactly equal to the app id Provision a system user to be used by the app. The username is exactly equal to the app id
##### Example ### Example
```toml ```toml
[resources.system_user] [resources.system_user]
# (empty - defaults are usually okay) # (empty - defaults are usually okay)
``` ```
##### Properties ### Properties
- `allow_ssh`: (default: False) Adds the user to the ssh.app group, allowing SSH connection via this user - `allow_ssh`: (default: False) Adds the user to the ssh.app group, allowing SSH connection via this user
- `allow_sftp`: (default: False) Adds the user to the sftp.app group, allowing SFTP connection via this user - `allow_sftp`: (default: False) Adds the user to the sftp.app group, allowing SFTP connection via this user
- `allow_email`: (default: False) Enable authentication on the mail stack for the system user and send mail using `__APP__@__DOMAIN__`. A `mail_pwd` setting is automatically defined (similar to `db_pwd` for databases). You can then configure the app to use `__APP__` and `__MAIL_PWD__` as SMTP credentials (with host 127.0.0.1). You can also tweak the user-part of the domain-part of the email used by manually defining a custom setting `mail_user` or `mail_domain` - `allow_email`: (default: False) Enable authentication on the mail stack for the system user and send mail using `__APP__@__DOMAIN__`. A `mail_pwd` setting is automatically defined (similar to `db_pwd` for databases). You can then configure the app to use `__APP__` and `__MAIL_PWD__` as SMTP credentials (with host 127.0.0.1). You can also tweak the user-part of the domain-part of the email used by manually defining a custom setting `mail_user` or `mail_domain`
- `home`: (default: `/var/www/__APP__`) Defines the home property for this user. NB: unfortunately you can't simply use `__INSTALL_DIR__` or `__DATA_DIR__` for now - `home`: (default: `/var/www/__APP__`) Defines the home property for this user. NB: unfortunately you can't simply use `__INSTALL_DIR__` or `__DATA_DIR__` for now
##### Provision/Update ### Provision/Update
- will create the system user if it doesn't exists yet - will create the system user if it doesn't exists yet
- will add/remove the ssh/sftp.app groups - will add/remove the ssh/sftp.app groups
##### Deprovision ### Deprovision
- deletes the user and group - deletes the user and group
""" """
@ -819,28 +838,28 @@ class InstalldirAppResource(AppResource):
""" """
Creates a directory to be used by the app as the installation directory, typically where the app sources and assets are located. The corresponding path is stored in the settings as `install_dir` Creates a directory to be used by the app as the installation directory, typically where the app sources and assets are located. The corresponding path is stored in the settings as `install_dir`
##### Example ### Example
```toml ```toml
[resources.install_dir] [resources.install_dir]
# (empty - defaults are usually okay) # (empty - defaults are usually okay)
``` ```
##### Properties ### Properties
- `dir`: (default: `/var/www/__APP__`) The full path of the install dir - `dir`: (default: `/var/www/__APP__`) The full path of the install dir
- `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the install dir - `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the install dir
- `group`: (default: `__APP__:rx`) The group (and group permissions) for the install dir - `group`: (default: `__APP__:rx`) The group (and group permissions) for the install dir
##### Provision/Update ### Provision/Update
- during install, the folder will be deleted if it already exists (FIXME: is this what we want?) - during install, the folder will be deleted if it already exists (FIXME: is this what we want?)
- if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location - if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location
- otherwise, creates the directory if it doesn't exists yet - otherwise, creates the directory if it doesn't exists yet
- (re-)apply permissions (only on the folder itself, not recursively) - (re-)apply permissions (only on the folder itself, not recursively)
- save the value of `dir` as `install_dir` in the app's settings, which can be then used by the app scripts (`$install_dir`) and conf templates (`__INSTALL_DIR__`) - save the value of `dir` as `install_dir` in the app's settings, which can be then used by the app scripts (`$install_dir`) and conf templates (`__INSTALL_DIR__`)
##### Deprovision ### Deprovision
- recursively deletes the directory if it exists - recursively deletes the directory if it exists
##### Legacy management ### Legacy management
- In the past, the setting was called `final_path`. The code will automatically rename it as `install_dir`. - In the past, the setting was called `final_path`. The code will automatically rename it as `install_dir`.
- As explained in the 'Provision/Update' section, the folder will also be moved if the location changed - As explained in the 'Provision/Update' section, the folder will also be moved if the location changed
@ -934,30 +953,30 @@ class DatadirAppResource(AppResource):
""" """
Creates a directory to be used by the app as the data store directory, typically where the app multimedia or large assets added by users are located. The corresponding path is stored in the settings as `data_dir`. This resource behaves very similarly to install_dir. Creates a directory to be used by the app as the data store directory, typically where the app multimedia or large assets added by users are located. The corresponding path is stored in the settings as `data_dir`. This resource behaves very similarly to install_dir.
##### Example ### Example
```toml ```toml
[resources.data_dir] [resources.data_dir]
# (empty - defaults are usually okay) # (empty - defaults are usually okay)
``` ```
##### Properties ### Properties
- `dir`: (default: `/home/yunohost.app/__APP__`) The full path of the data dir - `dir`: (default: `/home/yunohost.app/__APP__`) The full path of the data dir
- `subdirs`: (default: empty list) A list of subdirs to initialize inside the data dir. For example, `['foo', 'bar']` - `subdirs`: (default: empty list) A list of subdirs to initialize inside the data dir. For example, `['foo', 'bar']`
- `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the data dir - `owner`: (default: `__APP__:rwx`) The owner (and owner permissions) for the data dir
- `group`: (default: `__APP__:rx`) The group (and group permissions) for the data dir - `group`: (default: `__APP__:rx`) The group (and group permissions) for the data dir
##### Provision/Update ### Provision/Update
- if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location - if the dir path changed and a folder exists at the old location, the folder will be `mv`'ed to the new location
- otherwise, creates the directory if it doesn't exists yet - otherwise, creates the directory if it doesn't exists yet
- create each subdir declared and which do not exist already - create each subdir declared and which do not exist already
- (re-)apply permissions (only on the folder itself and declared subdirs, not recursively) - (re-)apply permissions (only on the folder itself and declared subdirs, not recursively)
- save the value of `dir` as `data_dir` in the app's settings, which can be then used by the app scripts (`$data_dir`) and conf templates (`__DATA_DIR__`) - save the value of `dir` as `data_dir` in the app's settings, which can be then used by the app scripts (`$data_dir`) and conf templates (`__DATA_DIR__`)
##### Deprovision ### Deprovision
- (only if the purge option is chosen by the user) recursively deletes the directory if it exists - (only if the purge option is chosen by the user) recursively deletes the directory if it exists
- also delete the corresponding setting - also delete the corresponding setting
##### Legacy management ### Legacy management
- In the past, the setting may have been called `datadir`. The code will automatically rename it as `data_dir`. - In the past, the setting may have been called `datadir`. The code will automatically rename it as `data_dir`.
- As explained in the 'Provision/Update' section, the folder will also be moved if the location changed - As explained in the 'Provision/Update' section, the folder will also be moved if the location changed
@ -1049,7 +1068,7 @@ class AptDependenciesAppResource(AppResource):
""" """
Create a virtual package in apt, depending on the list of specified packages that the app needs. The virtual packages is called `$app-ynh-deps` (with `_` being replaced by `-` in the app name, see `ynh_install_app_dependencies`) Create a virtual package in apt, depending on the list of specified packages that the app needs. The virtual packages is called `$app-ynh-deps` (with `_` being replaced by `-` in the app name, see `ynh_install_app_dependencies`)
##### Example ### Example
```toml ```toml
[resources.apt] [resources.apt]
packages = ["nyancat", "lolcat", "sl"] packages = ["nyancat", "lolcat", "sl"]
@ -1060,16 +1079,16 @@ class AptDependenciesAppResource(AppResource):
extras.yarn.packages = ["yarn"] extras.yarn.packages = ["yarn"]
``` ```
##### Properties ### Properties
- `packages`: List of packages to be installed via `apt` - `packages`: List of packages to be installed via `apt`
- `packages_from_raw_bash`: A multi-line bash snippet (using triple quotes as open/close) which should echo additional packages to be installed. Meant to be used for packages to be conditionally installed depending on architecture, debian version, install questions, or other logic. - `packages_from_raw_bash`: A multi-line bash snippet (using triple quotes as open/close) which should echo additional packages to be installed. Meant to be used for packages to be conditionally installed depending on architecture, debian version, install questions, or other logic.
- `extras`: A dict of (repo, key, packages) corresponding to "extra" repositories to fetch dependencies from - `extras`: A dict of (repo, key, packages) corresponding to "extra" repositories to fetch dependencies from
##### Provision/Update ### Provision/Update
- The code literally calls the bash helpers `ynh_install_app_dependencies` and `ynh_install_extra_app_dependencies`, similar to what happens in v1. - The code literally calls the bash helpers `ynh_install_app_dependencies` and `ynh_install_extra_app_dependencies`, similar to what happens in v1.
- Note that when `packages` contains some phpX.Y-foobar dependencies, this will automagically define a `phpversion` setting equal to `X.Y` which can therefore be used in app scripts ($phpversion) or templates (`__PHPVERSION__`) - Note that when `packages` contains some phpX.Y-foobar dependencies, this will automagically define a `phpversion` setting equal to `X.Y` which can therefore be used in app scripts ($phpversion) or templates (`__PHPVERSION__`)
##### Deprovision ### Deprovision
- The code literally calls the bash helper `ynh_remove_app_dependencies` - The code literally calls the bash helper `ynh_remove_app_dependencies`
""" """
@ -1157,7 +1176,7 @@ class PortsResource(AppResource):
Note that because multiple ports can be booked, each properties is prefixed by the name of the port. `main` is a special name and will correspond to the setting `$port`, whereas for example `xmpp_client` will correspond to the setting `$port_xmpp_client`. Note that because multiple ports can be booked, each properties is prefixed by the name of the port. `main` is a special name and will correspond to the setting `$port`, whereas for example `xmpp_client` will correspond to the setting `$port_xmpp_client`.
##### Example ### Example
```toml ```toml
[resources.ports] [resources.ports]
# (empty should be fine for most apps... though you can customize stuff if absolutely needed) # (empty should be fine for most apps... though you can customize stuff if absolutely needed)
@ -1169,21 +1188,21 @@ class PortsResource(AppResource):
xmpp_client.exposed = "TCP" # here, we're telling that the port needs to be publicly exposed on TCP on the firewall xmpp_client.exposed = "TCP" # here, we're telling that the port needs to be publicly exposed on TCP on the firewall
``` ```
##### Properties (for every port name) ### Properties (for every port name)
- `default`: The prefered value for the port. If this port is already being used by another process right now, or is booked in another app's setting, the code will increment the value until it finds a free port and store that value as the setting. If no value is specified, a random value between 10000 and 60000 is used. - `default`: The prefered value for the port. If this port is already being used by another process right now, or is booked in another app's setting, the code will increment the value until it finds a free port and store that value as the setting. If no value is specified, a random value between 10000 and 60000 is used.
- `exposed`: (default: `false`) Wether this port should be opened on the firewall and be publicly reachable. This should be kept to `false` for the majority of apps than only need a port for internal reverse-proxying! Possible values: `false`, `true`(=`Both`), `Both`, `TCP`, `UDP`. This will result in the port being opened on the firewall, and the diagnosis checking that a program answers on that port. - `exposed`: (default: `false`) Wether this port should be opened on the firewall and be publicly reachable. This should be kept to `false` for the majority of apps than only need a port for internal reverse-proxying! Possible values: `false`, `true`(=`Both`), `Both`, `TCP`, `UDP`. This will result in the port being opened on the firewall, and the diagnosis checking that a program answers on that port.
- `fixed`: (default: `false`) Tells that the app absolutely needs the specific value provided in `default`, typically because it's needed for a specific protocol - `fixed`: (default: `false`) Tells that the app absolutely needs the specific value provided in `default`, typically because it's needed for a specific protocol
##### Provision/Update (for every port name) ### Provision/Update (for every port name)
- If not already booked, look for a free port, starting with the `default` value (or a random value between 10000 and 60000 if no `default` set) - If not already booked, look for a free port, starting with the `default` value (or a random value between 10000 and 60000 if no `default` set)
- If `exposed` is not `false`, open the port in the firewall accordingly - otherwise make sure it's closed. - If `exposed` is not `false`, open the port in the firewall accordingly - otherwise make sure it's closed.
- The value of the port is stored in the `$port` setting for the `main` port, or `$port_NAME` for other `NAME`s - The value of the port is stored in the `$port` setting for the `main` port, or `$port_NAME` for other `NAME`s
##### Deprovision ### Deprovision
- Close the ports on the firewall if relevant - Close the ports on the firewall if relevant
- Deletes all the port settings - Deletes all the port settings
##### Legacy management ### Legacy management
- In the past, some settings may have been named `NAME_port` instead of `port_NAME`, in which case the code will automatically rename the old setting. - In the past, some settings may have been named `NAME_port` instead of `port_NAME`, in which case the code will automatically rename the old setting.
""" """
@ -1216,17 +1235,30 @@ class PortsResource(AppResource):
if properties[port]["default"] is None: if properties[port]["default"] is None:
properties[port]["default"] = random.randint(10000, 60000) properties[port]["default"] = random.randint(10000, 60000)
# This is to prevent using twice the same port during provisionning.
self.ports_used_by_self: list[int] = []
super().__init__({"ports": properties}, *args, **kwargs) super().__init__({"ports": properties}, *args, **kwargs)
def _port_is_used(self, port): def _port_is_used(self, port):
# FIXME : this could be less brutal than two os.system... # FIXME : this could be less brutal than two os.system...
cmd1 = ( used_by_process = (
"ss --numeric --listening --tcp --udp | awk '{print$5}' | grep --quiet --extended-regexp ':%s$'" os.system(
% port "ss --numeric --listening --tcp --udp | awk '{print$5}' | grep --quiet --extended-regexp ':%s$'"
% port
)
== 0
) )
# This second command is mean to cover (most) case where an app is using a port yet ain't currently using it for some reason (typically service ain't up) # This second command is mean to cover (most) case where an app is using a port yet ain't currently using it for some reason (typically service ain't up)
cmd2 = f"grep --quiet --extended-regexp \"port: '?{port}'?\" /etc/yunohost/apps/*/settings.yml" used_by_app = (
return os.system(cmd1) == 0 or os.system(cmd2) == 0 os.system(
f"grep --quiet --extended-regexp \"port: '?{port}'?\" /etc/yunohost/apps/*/settings.yml"
)
== 0
)
used_by_self_provisioning = port in self.ports_used_by_self
return used_by_process or used_by_app or used_by_self_provisioning
def provision_or_update(self, context: Dict = {}): def provision_or_update(self, context: Dict = {}):
from yunohost.firewall import firewall_allow, firewall_disallow from yunohost.firewall import firewall_allow, firewall_disallow
@ -1256,6 +1288,7 @@ class PortsResource(AppResource):
while self._port_is_used(port_value): while self._port_is_used(port_value):
port_value += 1 port_value += 1
self.ports_used_by_self.append(port_value)
self.set_setting(setting_name, port_value) self.set_setting(setting_name, port_value)
if infos["exposed"]: if infos["exposed"]:
@ -1286,25 +1319,25 @@ class DatabaseAppResource(AppResource):
NB2: no automagic migration will happen in an suddenly change `type` from `mysql` to `postgresql` or viceversa in its life NB2: no automagic migration will happen in an suddenly change `type` from `mysql` to `postgresql` or viceversa in its life
##### Example ### Example
```toml ```toml
[resources.database] [resources.database]
type = "mysql" # or : "postgresql". Only these two values are supported type = "mysql" # or : "postgresql". Only these two values are supported
``` ```
##### Properties ### Properties
- `type`: The database type, either `mysql` or `postgresql` - `type`: The database type, either `mysql` or `postgresql`
##### Provision/Update ### Provision/Update
- (Re)set the `$db_name` and `$db_user` settings with the sanitized app name (replacing `-` and `.` with `_`) - (Re)set the `$db_name` and `$db_user` settings with the sanitized app name (replacing `-` and `.` with `_`)
- If `$db_pwd` doesn't already exists, pick a random database password and store it in that setting - If `$db_pwd` doesn't already exists, pick a random database password and store it in that setting
- If the database doesn't exists yet, create the SQL user and DB using `ynh_mysql_create_db` or `ynh_psql_create_db`. - If the database doesn't exists yet, create the SQL user and DB using `ynh_mysql_create_db` or `ynh_psql_create_db`.
##### Deprovision ### Deprovision
- Drop the DB using `ynh_mysql_remove_db` or `ynh_psql_remove_db` - Drop the DB using `ynh_mysql_remove_db` or `ynh_psql_remove_db`
- Deletes the `db_name`, `db_user` and `db_pwd` settings - Deletes the `db_name`, `db_user` and `db_pwd` settings
##### Legacy management ### Legacy management
- In the past, the sql passwords may have been named `mysqlpwd` or `psqlpwd`, in which case it will automatically be renamed as `db_pwd` - In the past, the sql passwords may have been named `mysqlpwd` or `psqlpwd`, in which case it will automatically be renamed as `db_pwd`
""" """